将数据推入 for 循环 JavaScript 中的数组

新手上路,请多包涵

有人能给我解释一下为什么会这样吗

itemIds = [];
for (var i = 0; i <= data.length; i++) {
  itemIds.push(data[0].item);
}
console.log(itemIds); // outputs as expected, the same thing, data.length times

但这不起作用(唯一的变化是将 i 添加到 push()

 itemIds = [];
for (var i = 0; i <= data.length; i++) {
  itemIds.push(data[i].item);
}
console.log(itemIds); // TypeError: Cannot read property 'item' of undefined

我需要这样做 data 在这个例子中来自一个角度 $http 调用,并返回一个对象。我不明白为什么静态输入 0 有效,但试图让它遍历每个 data.item 却不起作用。

原文由 Truextacy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 276
2 个回答

这是因为您的变量 i 最终会增加到数组的长度以上。

您需要将 for 循环从 i <= data.length 更改为 i < data.length

这将确保 i 变量将始终在数组的范围内。

考虑到索引是从零开始的,但是长度会从一开始向上计数,所以长度总是比最高索引多一。

原文由 Daniel Hall 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是我的虚拟解释。

i 永远不能等于 data.lenght

如果例如:

 var data = ['Bob', 'John', 'Mike'];
data[0] = Bob
data[1] = John
data[2] = Mike
data[3] = ?

因此 data[3] 不能等于 data.length = 3 ,它从 0 开始循环。

希望对新手有所帮助。

原文由 carkod 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题