将数据推送到for循环JavaScript中的数组

时间:2016-11-01 21:09:01

标签: javascript arrays

有人可以向我解释为什么会这样做

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不会。

5 个答案:

答案 0 :(得分:3)

这是因为你的变量i最终将增加到数组的长度之上。

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

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

考虑到索引是从零开始的,但是长度将从1开始计算,长度总是比最高索引多一个。

答案 1 :(得分:3)

这是我的虚拟解释。

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开始循环。

希望对新手有所帮助。

答案 2 :(得分:2)

只是说明出了什么问题

basket = ['milk', 'egg', 'chees']

for (var i = 0; i <= basket.length; i++) {
  console.log('loop ' + i, basket[i])
}

/*
Logs: 
loop 0 milk
loop 1 egg
loop 2 chees
loop 3 undefined
*/

答案 3 :(得分:1)

更改

for (var i = 0; i <= data.length; i++)

for (var i = 0; i < data.length; i++)

答案 4 :(得分:1)

basket = ['milk', 'egg', 'chees']

var x = "";

for (var i = 0; i <= basket.length; i++) {

x = 'loop ' + i, basket[i];
  console.log(x);
}

希望能解决问题。 '循环' + 我,篮子[i]; -- 如果未使用变量声明并且变量必须具有空内容,则本身会创建一个空的未识别元素,例如 var x = "";