2017-05-17 5 views
1

私は期待したほどうまく動作しない非常に単純なコードを持っています。JavaScriptを使った配列の反復処理で、間違った値が返される

[1] 
0 

をしかし、私は取得するために期待していた:

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

これは、出力

[1] 
1 

私はJavaScriptが動作する方法のいくつかのmissunderstandingを持っていると思います。

+0

アレイはアイテム0 = 1、mは[0]は、配列を反復していない項目1 – NickSlash

+0

を有していないので、[1]長さ1を有し、ゼロインデックスです。あなたはオブジェクトキーを反復しています。 「m」はオブジェクトであり、1つのキーは「0」と名付けられている。 'm [0]'は[1]を含むオブジェクトmのキー0です。 –

+1

@DanielBeck *あなたは配列を反復しない*、そうです。彼はm [0] –

答えて

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

にfor..in演算子は、キー、for..of演算子は値を渡す(0され、あなたの配列のキーだけを)(が、そのかなり新しい[ES6])また

、取得渡します

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

又はそれ以上のエレガント:c's位置のデータあなたの構造はトンのようなものであることを

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

注意彼は次のよう

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

を参照してください。私は幸運なキー命名法のために – user1754322

1

あなたがmのすべてのキーを反復処理する必要がある場合:

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

あなたがmの唯一0キーを選択する必要がある場合:

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

Uがされています印刷C、私はあなたが印刷したいと思います[x]

function run() { 
 
    var m = {0:[1]} 
 
    document.write(JSON.stringify(m[0]) + "<br>"); 
 
    for(var c in m[0]) document.write(m[c]); 
 
}
<button onclick="run()">Try it</button>

+0

異なるPythonの 'for ... in'に慣れています。* m [0] * + * m [c] *は多くの場合失敗します。 .. –

関連する問題