簡體   English   中英

無法讀取數組的屬性

[英]Cannot read property of array

在我的app.js中,我有以下內容:

post.find({'global': true}).sort('date').exec(function(err, data) {
  for (var i = 0; i <= data.length; i++) {
    console.log(data[i].email);
    //socket.emit('Post', {name: data[i].name, cont: data[i].cont, date: data[i].date});
  }
});

當我使用

console.log(data[i]);

我以以下形式獲取數據

{name: blah, cont: blah, email: blah, etc}

但是當我嘗試發射數據時

data[i].attribute

我得到錯誤

TypeError: Cannot read property 'attribute' of undefined

我知道數據在那里,因為我可以將其記錄在控制台中。 為什么我不能訪問數組的特定屬性? 有任何想法嗎?

可能是因為您如何使用循環。 您使用<=邏輯將使循環額外運行一次,因此將訪問不存在的數組值。 這是正在發生的情況:

var data = [{ foo: 'bar1' }, { foo: 'bar2' }];
for (var i = 0; i <= data.length; i++) {
  console.log(data[i].foo);
}

該循環將運行3次而不是2次,從而導致這種情況發生:

console.log(data[0].foo); // bar1
console.log(data[1].foo); // bar2
console.log(data[2].foo); // TypeError: Cannot read property 'foo' of undefined

要解決此問題,請將您的循環更改為for (var i = 0; i < data.length; i++)

另外,這是一個調試提示:在檢查類似您的錯誤時,您應該嘗試使用輸出,即使data是長度為一千的數組,該錯誤仍然只會在上一次迭代時拋出,並使用socket.emit()看起來就像循環只運行一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM