如何有效填充具有许多静态键/值对的Javascript对象文字?

Jér*_*nge 24 javascript object-literal static-initialization

创建Javascript对象的典型方法如下:

var map = new Object();
map[myKey1] = myObj1;
map[myKey2] = myObj2;
Run Code Online (Sandbox Code Playgroud)

我需要创建一个这样的映射,其中键和值都是字符串.我有一大堆但静态的对要添加到地图中.

有没有办法在Javascript中执行这样的操作:

var map =  { { "aaa", "rrr" }, { "bbb", "ppp" } ... };
Run Code Online (Sandbox Code Playgroud)

或者我必须为每个条目执行类似的操作:

map["aaa"]="rrr";
map["bbb"]="ppp";
...
Run Code Online (Sandbox Code Playgroud)

基本上,剩余的Javascript代码将遍历此映射并根据"运行时"已知的标准提取值.如果这个循环作业有更好的数据结构,我也很感兴趣.我的目标是尽量减少代码.

Nit*_*tin 62

在ES2015 aka ES6版本的JavaScript中,Map引入了一种新的数据类型.

let map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.get("key1"); // => value1
Run Code Online (Sandbox Code Playgroud)

查看此参考以获取更多信息.


zzz*_*Bov 36

JavaScript的对象文字语法,通常用于实例化对象(严重的是,没有人使用new Objectnew Array),如下所示:

var obj = {
    'key': 'value',
    'another key': 'another value',
     anUnquotedKey: 'more value!'
};
Run Code Online (Sandbox Code Playgroud)

对于数组,它是:

var arr = [
    'value',
    'another value',
    'even more values'
];
Run Code Online (Sandbox Code Playgroud)

如果你需要对象中的对象,那也没关系:

var obj = {
    'subObject': {
        'key': 'value'
    },
    'another object': {
         'some key': 'some value',
         'another key': 'another value',
         'an array': [ 'this', 'is', 'ok', 'as', 'well' ]
    }
}
Run Code Online (Sandbox Code Playgroud)

这种能够实例化静态数据的便捷方法是导致JSON数据格式的原因.

JSON有点挑剔,键必须用双引号括起来,以及字符串值:

{"foo":"bar", "keyWithIntegerValue":123}
Run Code Online (Sandbox Code Playgroud)


Chr*_*oph 5

它与对象文字符号一起工作正常:

var map = { key : { "aaa", "rrr" }, 
            key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE!
          }
Run Code Online (Sandbox Code Playgroud)

顺便说一下,实例化数组的常用方法

var array = [];
// directly with values:
var array = [ "val1", "val2", 3 /*numbers may be unquoted*/, 5, "val5" ];
Run Code Online (Sandbox Code Playgroud)

和对象

var object = {};
Run Code Online (Sandbox Code Playgroud)

你也可以这样做:

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
Run Code Online (Sandbox Code Playgroud)