Как эффективно заполнить объектный литерал 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 будет зацикливаться на этой карте и извлекать значения в соответствии с критериями, известными "во время выполнения". Если есть лучшая структура данных для этой циклической работы, мне тоже интересно. Моя цель - минимизировать код.

6 ответов

Решение

Объектный литеральный синтаксис 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}

В ES2015, также известной как версия ES6 JavaScript, новый тип данных называется Map вводится.

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

проверьте эту ссылку для получения дополнительной информации.

Он отлично работает с литеральной нотацией объекта:

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

Попробуйте это:

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

Синтаксис, который вы написали первым, недопустим. Вы можете достичь чего-то, используя следующее:

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

Попробуйте этот машинописный текст

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

MAP[this.name]
Другие вопросы по тегам