我只是在学习JavaScript,我试图在Mozilla上理解这个filter()
的例子,但我不明白这个例子是如何工作的,因为当我尝试做同样的事情时在我的例子中,它只返回一个空数组。
以下是链接中的示例:
var arr = [
{ id: 15 },
{ id: -1 },
{ id: 0 },
{ id: 3 },
{ id: 12.2 },
{ },
{ id: null },
{ id: NaN },
{ id: 'undefined' }
];
var invalidEntries = 0;
function filterByID(obj) {
if ('id' in obj && typeof(obj.id) === 'number' && !isNaN(obj.id)) {
return true; // <--- WHY?
} else {
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);
// 4
这是我的例子:
obj = [{0: 31}, {1: null}, {2: null}, {3, 28}]
function isNotNull(obj) {
for (var prop in obj) {
if (obj.prop != null) {
return true;
}
}
}
console.log(ages.filter(isNotNull)) // -> []
答案 0 :(得分:0)
引用您链接的页面:
回调用于测试数组中每个元素的函数。用。调用 arguments(元素,索引,数组)。返回true以保留元素, 否则就是假的。
答案 1 :(得分:0)
false
作为返回值意味着将在结果集中接受该对象。 CCParticleSystemQuad
表示它被视为无效。
答案 2 :(得分:0)
您需要使用数组语法来动态查找属性:
ages = [{0: 31}, {1: null}, {2: null}, {3: 28}]
function isNotNull(obj) {
for (var prop in obj) {
if (obj[prop] != null) {
return true;
}
}
}
console.log(ages.filter(isNotNull)) // -> [{"0":31},{"3":28}]
请注意obj[prop]
而不是obj.prop