Search code examples
javascriptobject-literalstatic-initialization

How to fill a Javascript object literal with many static key/value pairs efficiently?


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.


Solution

  • 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}