50

创建 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 代码将遍历此映射并根据“运行时”已知的标准提取值。如果这个循环工作有更好的数据结构,我也很感兴趣。我的目标是最小化代码。

4

6 回答 6

150

在 ES2015 又名 ES6 版本的 JavaScript 中,Map引入了一种名为的新数据类型。

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

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

于 2016-03-12T19:22:56.043 回答
48

JavaScript 的对象字面量语法,通常用于实例化对象(说真的,没有人使用new Objector new 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}
于 2013-02-05T16:18:55.017 回答
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
于 2013-02-05T16:20:55.773 回答
3

试试这个:

var map = {"aaa": "rrr", "bbb": "ppp"};
于 2013-02-05T16:23:42.790 回答
0

您首先编写的语法无效。您可以使用以下方法实现某些目标:

var map =  {"aaa": "rrr", "bbb": "ppp" /* etc */ };
于 2013-02-05T16:21:23.630 回答
0

试试这个打字稿

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

MAP[this.name]
于 2021-06-19T21:27:32.947 回答