javascript - Array.prototype.filter 自动过滤掉虚假值

标签 javascript arrays filter functional-programming

过滤器函数是否自动过滤掉假值,如 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/

相关文章:

javascript - 如何使Typescript识别递归类型而不落在字符串上

arrays - Ruby:在散列中分配数组值

jquery - 使用jquery过滤图像src中的单词

javascript - 从对象返回唯一键列表的正确方法

javascript - 在 ul li 上滑动切换

Python 3.6.1 - Numpy.power 返回正 int 数的立方幂的负值

python - pandas数据框索引过滤

Javascript Math.random() 返回非常相似的值

javascript - 如何使用 jquery 调整 html 表的行和列的大小?

date - Kibana:根据匹配ID的最小和最大日期汇总过滤结果