2017-05-17 2 views
1

Ich habe ein sehr einfaches Stück Code, der nicht funktioniert, wie ich es erwarten würde.JavaScript Iterieren über ein Array gibt den falschen Wert

<script> 
var m = {0:[1]} 
document.write(JSON.stringify(m[0]) + "<br>"); 
for(var c in m[0]) document.write(c); 
</script> 

Es gibt:

[1] 
0 

Aber ich hatte erwartet, zu erhalten:

[1] 
1 

Ich glaube, ich habe einige Missverständnis aus dem Weg JavaScript funktioniert.

+0

Arrays sind nullindiziert, so [1] hat die Länge 1, Punkt 0 = 1 m [0] hat kein Element 1 – NickSlash

+0

Sie sind nicht über ein Array iterieren. Sie durchlaufen die Objektschlüssel. 'm' ist ein Objekt mit einem Schlüssel namens" 0 ". 'm [0]' ist Schlüssel 0 des Objekts m, das [1] enthält. –

+1

@DanielBeck * du iterierst nicht über ein Array *, ja er ist. er iteriert über m [0] –

Antwort

3
for(var c of m[0]) document.write(c); 

Der for..in Operator übergibt Schlüssel (den einzigen Schlüssel im Array ist 0), der for..of Operator Werte geht (aber sein ganz neu [ES6])

Alternativ erhalten die Daten an c's Position:

for(var c in m[0]) document.write(m[0][c]); 

Oder noch eleganter:

m[0].forEach(document.write); 

Beachten Sie, dass Ihre Struktur wie t er folgendes:

var m = {0:[1]} 
//is actually: 
var m = { 
    0:{ 
    0:1, 
    prototype:Array.prototype 
    } 
}; 
+0

Ich verstehe. Ich bin gewöhnt an die "for ... in" von Python, die anders ist – user1754322

1

Wenn Sie alle Schlüssel von m dann iterieren müssen:

for(var c in m) document.write(m[c]); 

Wenn Sie nur 0 Schlüssel m dann auswählen müssen:

for(var c in m[0]) document.write(m[0][c]); 
1

U sind Drucken c, ich glaube, Sie möchten m [x]

drucken

+0

dies funktioniert wegen der glücklichen Schlüsselbenennung ... * c in m [0] * + * m [c] * wird in vielen Fällen scheitern. .. –

Verwandte Themen