如何高效地填充一个包含多个静态键/值对的Javascript对象字面量?

59

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

var map = new Object();
map[myKey1] = myObj1;
map[myKey2] = myObj2;

我需要创建一个键和值都为字符串的映射。我有一组大但静态的键值对要添加到映射中。

在JavaScript中是否有办法执行类似于此的操作:

var map =  { { "aaa", "rrr" }, { "bbb", "ppp" } ... };

还是我需要针对每个条目执行类似这样的操作:

map["aaa"]="rrr";
map["bbb"]="ppp";
...

基本上,剩下的JavaScript代码将循环遍历这个映射,并根据在运行时已知的条件提取值。如果有更好的数据结构适用于此循环工作,我也很感兴趣。我的目标是尽量减少代码。


你真的尝试过像你问的那样使用 var map = { { "aaa", "rrr" }, { "bbb", "ppp" } ... }; 吗?因为当你在值之前加上额外的键时,这个方法完全有效... { key:{ "aaa", "rrr" }, key1:{ "bbb", "ppp" } } - Christoph
2
@jbabey,这并不完全是您提出的问题的重复,但我非常确定以前已经有人问过了;) - Christoph
6个回答

167
在JavaScript的ES2015(也称为ES6)版本中,引入了一种新的数据类型Map
let map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.get("key1"); // => value1

check this reference for more info.


52

JavaScript的对象字面量语法通常用于实例化对象(严肃点说,没有人使用new Objectnew Array),其语法如下:

var obj = {
    'key': 'value',
    'another key': 'another value',
     anUnquotedKey: 'more value!'
};

对于数组,可以这样理解:

var arr = [
    'value',
    'another value',
    'even more values'
];

如果您需要嵌套对象,也可以这样做:
var obj = {
    'subObject': {
        'key': 'value'
    },
    'another object': {
         'some key': 'some value',
         'another key': 'another value',
         'an array': [ 'this', 'is', 'ok', 'as', 'well' ]
    }
}

这种可以实例化静态数据的便捷方法是导致JSON数据格式出现的原因。
JSON要求键名必须用双引号括起来,字符串值也是如此。
{"foo":"bar", "keyWithIntegerValue":123}

5

使用对象字面量表示法能够正常工作:

var map = { key : { "aaa", "rrr" }, 
            key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE!
          }

顺便提一下,实例化数组的常见方式是:
var array = [];
// directly with values:
var array = [ "val1", "val2", 3 /*numbers may be unquoted*/, 5, "val5" ];

和对象

var object = {};

你也可以选择执行以下操作之一:

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

1

尝试使用这个TypeScript

const MAP: Record<string, string> = {
  key1: 'value1'
};

MAP[this.name]

1

Give this a try:

var map = {"aaa": "rrr", "bbb": "ppp"};

10
这是一个名为map的物体,不是地图。 - Schalton

0

你所写的语法不正确。你可以使用以下方法实现:

var map =  {"aaa": "rrr", "bbb": "ppp" /* etc */ };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接