2010-11-03 13 views
22

Estoy tratando de crear una matriz asociativa, crear una matriz vacía, y luego añadir un (indexName -> valor) par:variable como índice en una matriz asociativa - Javascript

var arrayName = new Array; 

arrayName["indexName"] = value; 

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

arrayName.indexName = value; 

Cuando le asigno la valor al indexName Quiero que indexName sea dinámico y el valor de una variable. Así que he intentado esto:

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

Dónde:

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

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

pero: alert(arrayName["indexName"]); no vuelve "valor" ... dice "indefinido"

¿Hay algo que me falta ? (No estoy familiarizado con eval()); Si el camino que intento es un callejón sin salida, ¿hay alguna otra manera de hacer que el nombre del índice del conjunto asociativo sea dinámico?

Respuesta

20

Al principio no creo que necesite un objeto de matriz real para hacer lo que necesita, puede usar un objeto simple.

simplemente Puede usar la notación de corchetes para acceder a una propiedad, utilizando el valor de una variable:

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

Array son simplemente objetos, el concepto de una "matriz asociativa" se puede lograr mediante el uso de un simple objeto, los objetos son colecciones de propiedades que contienen valores.

Las matrices verdaderas son útiles cuando necesita almacenar índices numéricos, actualizan automáticamente su propiedad length cuando le asigna un valor push.

+0

gracias ... matrices introdujeron algunas complicaciones con citas dentro de corchetes ... :) – bogdan

0

¿Está buscando variableName = 'bla'+'foo'; arrayRef[variableName] = 'something';?

Y aún así, debe usar un objeto literal en su lugar. x = {}; x[variablename] = 'blah';

4

uso arrayName[var1+var2]

Tenga en cuenta que arrayName.var es lo mismo que arrayName["var"] - es sólo azúcar sintáctico. La segunda forma se usa principalmente cuando se trata del tipo de problemas que se enfrentan: claves de objeto dinámico y claves que no son alfanuméricas (piense en arrayName[".eval()"]; esta es una clave de objeto perfectamente legal que no tiene nada que ver con la función javascript eval())

+0

gracias ah 6 caracteres más para ir – bogdan

+0

@bogdan Acepta la respuesta si es adecuado a sus necesidades :) –

0

desea que un objeto plano con el mismo bracket notaiton aquí, así:

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

Se podría usar objetos para hacer eso:

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

iterar, sólo tiene que utilizar una for loop o $.each() en jQuery.

0

De hecho, no había necesidad de un objeto de matriz, un simple objeto hizo el trabajo; Además, una matriz introdujo la necesidad de utilizar comillas dentro de los corchetes obj["var1 + var2"] para acceder al valor de la propiedad del objeto y no al valor asociado con un índice (creo); las comillas transformaron "var1 + var2" en una cadena.Usar un objeto simple eliminó la necesidad de cotizaciones, entonces puedo usar obj[var1 + var2], que funcionó :)

¡Gracias a todos!

+0

No, no es necesario usar comillas dentro de los corchetes. Si utiliza comillas obtendrá la cadena literal '" var1 + var2 "' y no los valores de 'var1' y' var2'. – some

0

Hice algo así como seguir;

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

Para acceder a eso por su nombre en ES6;

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