Tom*_*Sun 3 javascript arrays functional-programming filter
过滤器函数是否会自动过滤掉false,null或undefined等虚假值?如果是这样,如何阻止它这样做.
我需要过滤掉数组中的所有0,所以我使用了array.filter回调,并且我意识到过滤器函数会删除falsey值,即使我想保留它们也是如此.有没有解决的办法?
编辑:这是我的代码,并进行深度比较没有返回falsey值.
function removeZero(arr) {
return arr.filter(function(element){
if(element!==0){
return element;
}
});
}
Run Code Online (Sandbox Code Playgroud)
编辑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]
Run Code Online (Sandbox Code Playgroud)
与!=运算符的输出进行比较(您不想使用)
[1,2,3,0,[],{},false,undefined].filter(function(e){return e != 0})
// Output: [1, 2, 3, Object, undefined]
Run Code Online (Sandbox Code Playgroud)
这是您提供的代码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 ]
Run Code Online (Sandbox Code Playgroud)
你看,filter函数的返回值需要是一个布尔值,而不是你想要返回的元素.当您返回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 ]
Run Code Online (Sandbox Code Playgroud)