2012-06-07 14 views
5

Hola Actualmente estoy extraer una matriz con eachObtener clave de la matriz asociativa

$.each(messages, function(key,message){ doStuff(); }); 

Pero la clave es el índice de la matriz y no la clave asociativa.

¿Cómo puedo obtenerlo fácilmente?

Gracias

+5

Una matriz no tiene ninguna clave asociativa. El índice es la clave. ¿Que estás tratando de hacer? – Guffa

+2

¿Dónde está Array i.e 'messages'? publicar esa – thecodeparadox

+1

¿Podría proporcionarnos una matriz de ejemplo (2-3 elementos) y qué "clave asociativa" espera? –

Respuesta

9
var data = { 
    val1 : 'text1', 
    val2 : 'text2', 
    val3 : 'text3' 
}; 
$.each(data, function(key, value) { 
    alert("The key is '" + key + "' and the value is '" + value + "'"); 
}); 
​ 

Ver el Demo

+0

Gracias, usaré una matriz para hacer este trabajo, tienes razón –

0

JavaScript no tiene "arrays asociativos", como en PHP, pero los objetos. Los objetos, sin embargo, pueden tener claves de cadena que correspondan a un valor. Las matrices son listas de valores indexados numéricamente, entonces, si key es un número, debe ser una matriz con la que está trabajando y no un objeto, y por lo tanto no puede obtener la clave, ya que no hay ninguna.

Por lo tanto, es probable que desee iterar sobre una matriz con un simple for-loop en lugar de un iterador de devolución de llamada como $.each.

19

JavaScript no tiene "matrices asociativas". Cuenta con matrices:

[1, 2, 3, 4, 5] 

y objetos:

{a: 1, b: 2, c: 3, d: 4, e: 5} 

Array no tienen "llaves", que tienen índices, que se cuentan a partir de las 0.

se accede utilizando matrices [] , y se puede acceder a los objetos usando [] o ..

Ejemplo:

var array = [1,2,3]; 
array[1] = 4; 
console.log(array); // [1,4,3] 

var obj = {}; 
obj.test = 16; 
obj['123'] = 24; 
console.log(obj); // {test: 16, 123: 24} 

Si se intenta acceder a una matriz mediante una cadena como una llave en lugar de un int, que pueden causar problemas. Debería establecer una propiedad de la matriz y no un valor.

var array = [1,2,3]; 
array['test'] = 4; // this doesn't set a value in the array 
console.log(array); // [1,2,3] 
console.log(array.test); // 4 

$.each obras de jQuery con ambos. En la devolución de llamada para $.each, el primer parámetro, key, es la clave del objeto o el índice de la matriz.

$.each([1, 2, 3, 4, 5], function(key, value){ 
    console.log(key); // logs 0 1 2 3 4 
}); 

$.each({a: 1, b: 2, c: 3, d: 4, e: 5}, function(key, value){ 
    console.log(key); // logs 'a' 'b' 'c' 'd' 'e' 
}); 
Cuestiones relacionadas