Переменная как индекс в ассоциативном массиве - 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 пытается тупик, есть ли другой способ сделать индексное имя значения ассоциативного массива динамическим?
Ответы
Ответ 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');