158

I have code like this.

var key = "anything";   
var object = {   
    key: "key attribute"  
};

I want to know if there is a way to replace that key with "anything".

like

var object = {  
    "anything": "key attribute"     
};

7 Answers 7

349

In ES6, use computed property names.

const key = "anything";   

const object = {   
    [key]: "key attribute"
//  ^^^^^  COMPUTED PROPERTY NAME
};

Note the square brackets around key. You can actually specify any expression in the square brackets, not just a variable.

Sign up to request clarification or add additional context in comments.

1 Comment

That's fine for ES6 but what about older versions (IE11 will crash on the code above)
129

Yes. You can use:

var key = "anything";
var json = { };
json[key] = "key attribute";

Or simply use your second method if you have the values at hand when writing the program.

Comments

33

On modern Javascript (ECMAScript 6) you can sorround the variable with square brackets:

var key = "anything";

var json = {
    [key]: "key attribute"
};

Comments

16

This should do the trick:

var key = "anything";

var json = {};

json[key] = "key attribute";

1 Comment

But he wants to do this in the context of an object literal.
-2

Recently needed a solution how to set cookies passing the dynamic json key values. Using the https://github.com/js-cookie/js-cookie#json, it can be done easily. Wanted to store each selected option value of user in cookie, so it's not lost in case of tab or browser shutting down.

var json = { 
        option_values : {}
    };
    $('option:selected').each(function(index, el) {
        var option = $(this);
        var optionText = option.text();
        var key = 'option_' + index;
        json.option_values[key] = optionText;
        Cookies.set('option_values', json, { expires: 7 } );
    }); 

Then you can retrieve each cookie key value on each page load using

Cookies.getJSON('option_values');

Comments

-3

Closures work great for this.

function keyValue(key){
  return function(value){
    var object = {};
    object[key] = value;
    return object;
  }
}

var key = keyValue(key);
key(value);

2 Comments

Closure is merely the mechanism used here. The concept is HOF.
HOF = Higher Order Functions.
-3

Well, there isn't a "direct" way to do this...

but this should do it:

json[key] = json.key;
json.key = undefined;

Its a bit tricky, but hey, it works!

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.