2013-02-05 5 views
10

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

+0

Вы действительно попробовали 'var map = {{aaa", "rrr"}, {"bbb", "ppp"} ...}; 'как вы спрашивали? Потому что это отлично работает, когда вы добавляете дополнительный ключ перед значением ... '{key: {" aaa "," rrr "}, key1: {" bbb "," ppp "}}' – Christoph

+0

Возможный дубликат [How для создания свойства объекта из значения переменной в javascript?] (http://stackoverflow.com/questions/2241875/how-to-create-object-property-from-variable-value-in-javascript) – jbabey

+2

@jbabey не очень дубликат вашего предлагаемого вопроса, но я уверен, что это было задано раньше;) – Christoph

ответ

23

литерал объекта синтаксиса в 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 data format.

JSON является немного более разборчивы, ключи должны быть заключены в двойные кавычки, а также строковые значения:

{"foo":"bar", "keyWithIntegerValue":123} 
4

Он отлично работает с объектом буквального обозначения:

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 
1

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

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

Дайте этому попытку:

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

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

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

check this reference для получения дополнительной информации.