How to fill a Javascript object literal with many static key/value pairs efficiently?
Solution 1
JavaScript's object literal syntax, which is typically used to instantiate objects (seriously, no one uses new Object
or new Array
), is as follows:
var obj = {
'key': 'value',
'another key': 'another value',
anUnquotedKey: 'more value!'
};
For arrays it's:
var arr = [
'value',
'another value',
'even more values'
];
If you need objects within objects, that's fine too:
var obj = {
'subObject': {
'key': 'value'
},
'another object': {
'some key': 'some value',
'another key': 'another value',
'an array': [ 'this', 'is', 'ok', 'as', 'well' ]
}
}
This convenient method of being able to instantiate static data is what led to the JSON data format.
JSON is a little more picky, keys must be enclosed in double-quotes, as well as string values:
{"foo":"bar", "keyWithIntegerValue":123}
Solution 2
In ES2015 a.k.a ES6 version of JavaScript, a new datatype called Map
is introduced.
let map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.get("key1"); // => value1
check this reference for more info.
Solution 3
It works fine with the object literal notation:
var map = { key : { "aaa", "rrr" },
key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE!
}
Btw, the common way to instantiate arrays
var array = [];
// directly with values:
var array = [ "val1", "val2", 3 /*numbers may be unquoted*/, 5, "val5" ];
and objects
var object = {};
Also you can do either:
obj.property // this is prefered but you can also do
obj["property"] // this is the way to go when you have the keyname stored in a var
var key = "property";
obj[key] // is the same like obj.property
Solution 4
Give this a try:
var map = {"aaa": "rrr", "bbb": "ppp"};
![Jérôme Verstrynge](https://i.stack.imgur.com/bLCif.jpg?s=256&g=1)
Comments
-
Jérôme Verstrynge almost 2 years
The typical way of creating a Javascript object is the following:
var map = new Object(); map[myKey1] = myObj1; map[myKey2] = myObj2;
I need to create such a map where both keys and values are Strings. I have a large but static set of pairs to add to the map.
Is there any way to perform something like this in Javascript:
var map = { { "aaa", "rrr" }, { "bbb", "ppp" } ... };
or do I have to perform something like this for each entry:
map["aaa"]="rrr"; map["bbb"]="ppp"; ...
Basically, remaining Javascript code will loop over this map and extract values according to criterias known 'at runtime'. If there is a better data structure for this looping job, I am interested too. My objective is to minimize code.
-
Schalton almost 5 yearsthis is an object named map, not a map