Использование ассоциативных массивов в javascript

#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