Как эффективно заполнить карту Javascript со многими парами статических ключей/значений?
Типичным способом создания 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 будет перебирать эту карту и извлекать значения в соответствии с известными критериями "во время выполнения". Если для этой задачи цикла есть лучшая структура данных, мне тоже интересно. Моя цель - свести к минимуму код.
Ответы
Ответ 1
Синтаксис буквенного объекта JavaScript, который обычно используется для создания объектов (серьезно, никто не использует new Object
или 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}
Ответ 2
В ES2015 a.k.a версии JavaScript для JavaScript ES6 введен новый тип данных с именем Map
.
let map = new Map([["key1", "value1"], ["key2", "value2"]]);
map.get("key1"); // => value1
проверьте эту ссылку для получения дополнительной информации.
Ответ 3
Он отлично работает с литеральной записью объекта:
var map = { key : { "aaa", "rrr" },
key2: { "bbb", "ppp" } // trailing comma leads to syntax error in IE!
}
Btw, общий способ создания массивов
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
Ответ 4
Попробуйте:
var map = {"aaa": "rrr", "bbb": "ppp"};
Ответ 5
Синтаксис, который вы написали как первый, недействителен. Вы можете добиться чего-то, используя следующее:
var map = {"aaa": "rrr", "bbb": "ppp" /* etc */ };