2011-09-24 14 views
5

Sto creando un sistema di playlist in cui ogni canzone ha un ID univoco. Quando aggiungi una canzone all'array delle playlist, il suo indice è registrato come ID.Come eseguire l'iterazione su un oggetto in javascript con un indice non ordinato

Normalmente, quando si esegue il loop su un array javascript, si acquisisce la lunghezza e si esegue il conteggio attraverso l'indice. C'è un modo per scorrere un array con indici inutilizzati? È una cattiva pratica per qualsiasi motivo?

+0

Tutti gli array di javascript sono associativi, non è necessario utilizzare un indice di conteggio. – Perception

+0

@Perception: sciocchezze. Gli 'array' di Javascript hanno indici numerici sequenziali. Forse ti stai riferendo a oggetti più generali. Un errore comune –

+0

@Perception In realtà non esiste una matrice o una matrice associativa. Tutti gli oggetti sono praticamente degli hashtables. l'oggetto Array in Javascript ha solo alcuni metodi per agire come un array all'esterno. – Jonathan

risposta

5
var obj = {"123": "Lalala", 
      "456": "dum dum"}; 
for(var i in obj){ 
    //i = ID 
    // obj[i] = "song" 
} 

Utilizzare for(var i in obj) per scorrere un oggetto. Vedere i commenti sopra per comprendere il significato di questo articolo for.

Stai parlando di oggetti, non gli array, tra l'altro:

var array = [7, 5, 9]; 

un array può essere simulato in questo modo, in modo che un for(var i=0; i<array_like.length; i++) può essere utilizzato. Funzioni di Array (come ad esempio pop) non possono essere utilizzati su di loro, a meno che non si definisce che:

var array_like = {0:7, 1:5, 2:9, length:3}; 
+0

Grazie mille. Per ... sembra la mia soluzione. Grazie anche per avermi corretto. –

+0

In questo caso non importa, ma non dimenticare di verificare hasOwnProperty nell'approccio generale all'uso di ... in –

-1

Supponendo che l'array è in forma:

array['id1'] = 'val1'; 
array['id2'] = 'val2'; 
array['id3'] = 'val3'; 

È possibile scorrere i valori utilizzando:

for (var id in array) { 
    document.write(id + ' – ' + array[id]); 
} 
+0

Questo non può essere un array, ma un oggetto. –

4

È possibile accedere alle proprietà dell'oggetto in due modi. O usando un "." come ad esempio:

var my prop = obj.property; 

O tramite la notazione staffa:

var my prop = obj["property"]; 

Ora, che in realtà non rispondere alla tua domanda. Così, qui ci sono alcuni modi:

utilizzare ogni funzione di jQuery:

$.each(obj, function(key, value){ 
    //Do something with your key and value. 
}); 

Utilizzare la funzione di Javascript per:

for(var key in obj) 
{ 
    var value = obj[key]; 
    //Do something with your key and value. 
} 

Speranza che aiuta!

+0

Grazie. Per ... in sembra essere la strada da percorrere. Una cosa però: usare $ .each con jquery sembra comportarsi nello stesso modo in cui usa un normale ciclo for, in quanto inizierà con 0 e conterà fino alla sua lunghezza. –

0

si può anche fare solo 'per ogni' per scorrere i valori proprietà uniche:

var obj = { "key1": "val1", "key2": "val2"};

per ogni (valore di var in obj) { .... }

Ma in questo caso, non è in grado di accedere a un nome di proprietà.

+0

-1 per la parola chiave errata - è solo per, non "ciascuno" necessario. –

+0

Esistono due tipi di: 'for' - itera su indici, e 'for each' - itera su valori. Ma "per ciascuno" non è supportato nella vecchia versione di IE. Perché pensi che sia una parola chiave errata? – timestopper

+0

'per each' è un'estensione specifica per Mozilla della lingua e fornisce poco o nessun vantaggio rispetto alla sintassi standard' for ... in' disponibile in ECMA e in tutti i motori JS correnti. –