2013-10-04 67 views
2

的财产在我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 

我知道数据是存在的,因为我可以登录其在控制台中。为什么我不能访问数组的特定属性?有任何想法吗?

回答

1

这可能是因为你如何使用你的循环。你的逻辑<=将导致循环运行一个额外的时间,因此访问一个不存在的数组值。这是发生了什么的情况下:

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

循环将运行三次,而不是两次,导致这种情况发生:

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()它会出现好像循环只运行一次。

+0

没意识到那会很简单,谢谢! – Beaurocks16