2012-06-07 24 views
5

Ciao io sono attualmente recupero un array con .eachAcquista chiave di array associativo

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

ma la chiave è l'indice della matrice e non la chiave associativa.

Come posso farlo facilmente?

Grazie

+5

Una matrice non ha alcuna chiave associativa. L'indice è la chiave. Cosa stai cercando di fare? – Guffa

+2

Dove sei Array i.e 'messaggi'? postare questo – thecodeparadox

+1

Potresti fornire un array di esempio (2-3 elementi) e quale "chiave associativa" ti aspetti? –

risposta

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

Vedere la Demo

+0

Grazie, userò un array per ottenere questo lavoro hai ragione –

0

JavaScript non ha "array associativi", come in PHP, ma oggetti. Gli oggetti, tuttavia, potrebbero avere chiavi stringa corrispondenti a un valore. Gli array sono elenchi di valori indicizzati numericamente, quindi, se key è un numero, deve essere un array con cui si sta lavorando e non un oggetto, e quindi non è possibile ottenere la chiave, poiché non ce n'è.

Quindi, probabilmente si desidera eseguire un'iterazione su un array con un semplice for -loop anziché un iteratore basato sulla richiamata come $.each.

19

JavaScript non ha "array associativi". Presenta file:

[1, 2, 3, 4, 5] 

e oggetti:

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

Array non hanno "chiavi", hanno indici, che vengono contati iniziando da 0.

array sono accessibili tramite [] e gli oggetti sono accessibili tramite [] o ..

Esempio:

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} 

Se si tenta di accedere a una matrice utilizzando una stringa come una chiave, invece di un int, che può causare problemi. Dovresti impostare una proprietà dell'array e non un valore.

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 

jQuery's $.each funziona con entrambi. Nella callback per $.each, il primo parametro, key, è la chiave dell'oggetto o l'indice dell'array.

$.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' 
}); 
Problemi correlati