以下代码循环遍历数组。它在casperJS脚本中运行,因此是一个phantomJS无头浏览器环境
socket.on('list', function(data){
console.log("Message", JSON.stringify(data)); //no func def in this data
var localMatchStore= [];
for (var i in data.matches) {
localMatchStore.push(data.matches[i]);
}
console.log(localMatchStore);
});
这将返回我期望的数据,但也返回一个函数定义作为数组中的最后一项。这是为什么?
0580:MS101:2014,0580:MS127:2014,0580:MS128:2014,0901:LS162:2014,function () {
for(var i=0,sum=0;i<this.length;sum+=this[i++]);
return sum;
}
答案 0 :(得分:1)
尝试将hasOwnProperty()
与for..in
一起使用。该循环结构可以包括通过原型链继承的对象成员。 hasOwnProperty()
确保该属性是直接成员。
socket.on('list', function(data){
console.log("Message", JSON.stringify(data)); //no func def in this data
var localMatchStore= [];
for (var i in data.matches) {
if (data.matches.hasOwnProperty(i)) localMatchStore.push(data.matches[i]);
}
console.log(localMatchStore);
});
有关此功能的更深入讨论,请参阅MDN上的here。