Подтвердить что ты не робот

Переменная как индекс в ассоциативном массиве - Javascript

Я пытаюсь создать ассоциативный массив, создать пустой массив и затем добавить пару (indexName → ):

var arrayName = new Array;

arrayName["indexName"] = value;

// i know i can also do the last line like this:

arrayName.indexName = value;

Когда я присваиваю значение indexName, я хочу, чтобы indexName был динамическим и значением переменной. Поэтому я попробовал это:

arrayName[eval("nume")] = value;

Где:

var var1 = "index";
var var2 = "Name";

var nume = '"' + var1 + var2 + '"'; 

но: alert(arrayName["indexName"]); не возвращает "значение"... он говорит "undefined"

Есть ли что-то, что мне не хватает? (Я не знаком с eval()); если способ Im пытается тупик, есть ли другой способ сделать индексное имя значения ассоциативного массива динамическим?

4b9b3361

Ответ 1

Сначала я не думаю, что вам нужен реальный объект массива, чтобы делать то, что вам нужно, вы можете использовать простой объект.

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

var obj = {};
var nume = var1 + var2;
obj[nume] = value;

Массив - это просто объекты, концепция "ассоциативного массива" может быть достигнута с помощью простого объекта, объекты - это коллекции свойств, которые содержат значения.

Истинные массивы полезны, когда вам нужно хранить числовые индексы, они автоматически обновляют свое свойство length, когда вы назначаете индекс или вы push значение для него.

Ответ 2

Для этого вы использовали бы объекты:

var hash = {}
hash["foo"] = "foo";
hash.bar    = "bar";
// This is the dynamic approach: Your key is a string:
baz         = "baz"
hash[baz]   = "hello";

Чтобы выполнить итерацию, просто используйте цикл for или $.each() в jQuery.

Ответ 3

использовать arrayName[var1+var2]

Обратите внимание, что arrayName.var совпадает с arrayName["var"] - это просто синтаксический сахар. Вторая форма в основном используется при рассмотрении проблем, с которыми вы сталкиваетесь - динамических ключей объектов и клавиш, которые не являются алфавитно-цифровыми (думайте о arrayName[".eval()"]; это совершенно законный ключ объекта, который не имеет ничего общего с javascript eval())

Ответ 4

Вы ищете variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';?

И даже при этом вместо этого вы должны использовать литерал объекта. x = {}; x[variablename] = 'blah';

Ответ 5

Здесь вы хотите получить простой объект с тем же > скобкой notaiton:

var arrayName = {};
arrayName["indexName"] = value;

Ответ 6

В самом деле, не было необходимости в объекте массива, простой объект выполнял эту работу; Кроме того, массив представил необходимость использования кавычек в квадратных скобках obj["var1 + var2"] для доступа к значению свойства объекта, а не к значению, связанному с индексом (я думаю); кавычки преобразовали "var1 + var2" в строку. Использование простого объекта устраняло необходимость в котировках, поэтому я могу использовать obj[var1 + var2], который работал:)

Спасибо всем!

Ответ 7

Я сделал что-то вроде следующего:

let parentArray = [];
let childArray = [1, 2, 3];
childArray.name = 'my-array-1';
parentArray.push(childArray);

Чтобы получить доступ к этому имени в ES6;

parentArray.filter(x => x.name == 'my-array-1');