迭代数组的JavaScript会给出错误的值

时间:2017-05-17 15:08:34

标签: javascript arrays

我有一段非常简单的代码,不能像我期望的那样工作。

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

输出:

[1]
0

但我期待得到:

[1]
1

我想我对JavaScript的工作方式有一些误解。

3 个答案:

答案 0 :(得分:3)

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

for..in运算符传递键(数组中唯一的键是0),for..of运算符传递值(但它的全新[ES6])

或者,在c的位置获取数据:

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

甚至更优雅:

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

请注意,您的结构如下所示:

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

答案 1 :(得分:1)

如果您需要迭代m的所有键,那么:

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

如果您只需要选择0的{​​{1}}键,那么:

m

答案 2 :(得分:1)

你正在打印c,我想你要打印m [x]

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