#javascript #arrays
#javascript #массивы
Вопрос:
Я хочу создать что-то вроде объекта dictionary, где в качестве ключа задано имя, оно должно выводить свое значение.
Например
dict["jerry"] should output 20 as value.
Или
var name = "jerry";
dict[name] should output 20 as value
Мой код.
var totalAdditions = [];
totalAdditions.push({name:statsObj.author.login, value: additions});
//statsObj.author.login contains "jerry"
console.log(obj.login); //also contains value "jerry"
console.log(totalAdditions[obj.login]); //returns undefined??
Комментарии:
1.
totalAdditions
является массивом, имеющим ключи как0,1,2,....
, выберите конкретный объект из массива с помощьюindex
, а затем используйте[](bracket notation)
для доступа к свойству…2. Часть, следующая за «Моим кодом», совершенно непонятна. Что такое
statsObj
? Что такоеobj
? Какое отношение этот код, представляющий собой массив объектов, имеет к более раннему отображению кода"jerry"
на 20?3. Вы могли бы рассмотреть возможность использования нового объекта Map , который существует для этих случаев применения
Ответ №1:
В JavaScript нет «ассоциативных массивов». В нем действительно есть объекты, которые могут делать то, что вы хотите, и Map
(начиная с ES2015), которые также могут делать то, что вы хотите.
Объект:
var dict = Object.create(null); // Not {} so it doesn't inherit props like
// "toString", "valueOf", etc.
var name = "jerry";
dict["jerry"] = 20;
console.log(dict[name]); // 20
ES2015 Map
:
let dict = new Map();
var name = "jerry";
dict.set("jerry", 20);
console.log(dict.get(name)); // 20