Reputation: 19027
I would expect the following three associative arrays to be identical:
arr1 = { "dynamic":"foo", "bar":"baz" };
key = "dynamic";
arr2 = { key:"foo", "bar":"baz" };
arr3 = {};
arr3[key] = "foo";
arr3["bar"] = "baz";
In the above examples, arr1
and arr3
are the same, but arr2
is different.
Is it possible to use dynamic keys in the declaration of a javascript associative array?
Upvotes: 19
Views: 19339
Reputation: 552
var originalObj = {};//some data here
function addKeyValuePair(originalObj,key,value){
originalObj = {...originalObj,[key]:value}
};
Upvotes: 0
Reputation: 7654
It is now possible to use dynamic keys in the declaration of a javascript object, in any browser/platform that supports ES6 literal shorthands:
key = "dynamic";
arr2 = {
[key]: "foo", // "dynamic": "foo"
"bar": "baz"
};
Upvotes: 20
Reputation: 995
Since you asked for a one liner, try this:
var key = 'dynamic', obj = (function(o) { o[key]='foo'; return o;})({bar: 'baz'});
This will make obj
equal to {bar: "baz", dynamic: "foo"}
Upvotes: 1
Reputation: 181
I found a solution for this.
Do as following:
var field='name';
var ourVar={};
ourVar[field] = 'Somethig';
Source: Javascript: variable as array key
Upvotes: 7
Reputation: 318518
Only the []
syntax works for dynamic keys. You cannot use them in a literal. So your answer is no, it's not possible.
But you can use a literal to create all the static keys and then add the dynamic ones using the []
syntax. That's usually prettier than using the .
or []
notation for all elements.
Upvotes: 9