过滤器函数是否自动过滤掉假值,如 false、null 或 undefined?如果是这样,如何阻止它这样做。
我需要过滤掉数组中的所有 0,所以我使用了 array.filter 回调,我意识到过滤函数会删除虚假值,即使我想保留它们也是如此。有解决办法吗?
编辑:这是我的代码,进行深入比较并没有返回错误值。
function removeZero(arr) {
return arr.filter(function(element){
if(element!==0){
return element;
}
});
}
编辑 2:这是包含测试数组内容的 repl.it 链接,当我运行它时,结果过滤掉了 false、null 和 undefined。 https://repl.it/BAiK
最佳答案
使用 !==
运算符
[1,2,3,0,[],{},false,undefined].filter(function(e){return e !== 0})
// Output: [1, 2, 3, Array[0], Object, false, undefined]
与 !=
运算符(您不想使用)的输出进行比较
[1,2,3,0,[],{},false,undefined].filter(function(e){return e != 0})
// Output: [1, 2, 3, Object, undefined]
这是您提供的代码 https://repl.it/BAiK
var removeZeros = function (arr) {
return arr.filter(function(element){
if(element!==0){
return element; // here is the error, you need to return a boolean. (true to add element to final array, false to ignore element)
}
});
}
console.log(removeZeros([false, 1, 2, 3, null, 0, 4, undefined, 5, 0]));
// Output: [ 1, 2, 3, 4, 5 ]
你看,过滤函数的返回值需要是一个 bool 值,而不是你要返回的元素。当你返回 false 时,该元素不会添加到最终数组中,当你返回 true 时,返回正在处理的元素。查看我的修改,您的代码已修复
这是你的代码修复
var removeZeros = function (arr) {
return arr.filter(function(element){
return element !== 0 // this returns a boolean
});
}
console.log(removeZeros([false, 1, 2, 3, null, 0, 4, undefined, 5, 0]));
// Output: [ false, 1, 2, 3, null, 4, undefined, 5 ]
关于javascript - Array.prototype.filter 自动过滤掉虚假值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841645/