2010-11-03 2 views
22

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

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"]); не возвращает "значение" ... он говорит: "не определено"

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

ответ

20

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

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

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

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

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

+0

спасибо ... Массивы введены некоторые сложности с кавычками внутри квадратных скобок – bogdan

0

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

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

4

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

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

+0

спасибо :) ... ах больше 6 символов пойти – bogdan

+0

@bogdan Принять ответ, если он соответствует вашим потребностям :) –

0

Вы хотите простой объект с тем же bracket notaiton здесь, как это:

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

Вы могли бы использовать объекты, чтобы сделать это:

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.

0

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

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

+0

Нет, не нужно использовать кавычки внутри скобок. Если вы используете кавычки, вы получаете буквальную строку '' var1 + var2'', а не значения 'var1' и' var2'. – some

0

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

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

Для доступа к этому в ES6;

parentArray.filter(x => x.name == 'my-array-1'); 
Смежные вопросы