工作时在此示例在MDN站点解释滤波器方法:两个不同的输出使用+ VS,级联方法
var arr = [
{ id: 15 },
{ id: -1 },
{ id: 0 },
{ id: 3 },
{ id: 12.2 },
{ },
{ id: null },
{ id: NaN },
{ id: 'undefined' }
];
var invalidEntries = 0;
function isNumber(obj) {
return obj!== undefined && typeof(obj) === 'number' && !isNaN(obj);
}
function filterByID(item) {
if (isNumber(item.id)) {
return true;
}
invalidEntries++;
return false;
}
var arrByID = arr.filter(filterByID);
console.log('Filtered Array\n', arrByID);
// Filtered Array
// [{ id: 15 }, { id: -1 }, { id: 0 }, { id: 3 }, { id: 12.2 }]
console.log('Number of Invalid Entries = ', invalidEntries);
// Number of Invalid Entries = 4
这得到在萤火输出,正如所料:
Filtered array
[Object { id=15}, Object { id=-1}, Object { id=0}, Object { id=3}, Object { id=12.2}]
Number of Invalid Entries: 4
但我最初,错误地但是故意键入第一个console.log();声明如下:
console.log('Filtered array\n' + arrById);
,并得到这个萤火输出:
Filtered array
[object Object],[object Object],[object Object],[object Object],[object Object]
Number of Invalid Entries: 4
为什么不同的输出?
+1这是一个更完整的答案,有一个更详细的解释,在objs上调用toSting()。 – commnux