2016-11-01 86 views
2

可能有人給我一個解釋,爲什麼這個工程數據推到數組裏面一個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 

但是,這並不工作(唯一的變化是增加ipush()

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

+0

試'itemIds.push(數據[I] [項目])'; –

+5

將'<='改爲'<',你都很好 – Endless

+0

@Endless我不認爲這解決了將'undefined'元素推入數組的問題。 –

回答

3

這是因爲您的變量i最終會增加到數組長度以上。

您需要爲循環改變你從i <= data.lengthi < data.length

這將確保i變量將始終在數組的範圍內。

考慮到索引是從零開始的,但長度將從一開始計數,長度總是比最高索引多一個。

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 
 
*/

2

這是我虛擬的解釋。

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

循環希望這有助於爲新手。

1

變化

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

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