【问题标题】:Javascript - Filtering even numbersJavascript - 过滤偶数
【发布时间】:2018-08-16 11:48:20
【问题描述】:

我想过滤包含零 (0) 的数组,同时捕获它们。

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(function(x) {
  if (x % 2 === 0 || x === 0) {
    return x;
  }
})

console.log(evens);

为什么我的“偶数”数组中没有回零?如果零不被归类为偶数,我的

|| x===0

语句抓住了零?

谢谢 布拉德

【问题讨论】:

标签: javascript arrays filter


【解决方案1】:

您需要从Array#filter 函数返回truefalse。根据返回值,它将填充返回的数组。因为条件返回boolean,所以只要给条件设置返回值即可。

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(function(x) {
   return x % 2 === 0;
})

console.log(evens);

使用箭头函数的语法更短

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(x => x % 2 === 0);

console.log(evens);

【讨论】:

  • 一旦你检查了x % 2 === 0,就不需要x === 0
  • @MasterTextman 大师谢谢。我刚刚复制了这个问题。已编辑
  • 可能短一点:arr1.filter(x => x % 2 === 0)。 ;)
【解决方案2】:

filter 内部返回true/false。在您的代码中,当您返回 0 时,filter 会认为它是 falsy,因此您不会在过滤后的数组中得到 0。

var arr1= [-200,-163, -26, -4, 0, 7,76];

var evens = arr1.filter(function(x){
  return x%2===0 || x===0
})

console.log(evens);

【讨论】:

    【解决方案3】:

    因为0 被认为是一个假值。

    您的过滤器函数本质上是为0 返回false 并从数组中过滤它。

    查看this 以获得更深入的了解。

    谢谢

    【讨论】:

      【解决方案4】:

      数组过滤器期望返回布尔值而不是数字
      如果您需要结果中的值,则它应该为真,否则为假;
      0 被视为错误值。

      你可以在你的函数中返回 true

      var arr1 = [-200, -163, -26, -4, 0, 7, 76];
      
      var evens = arr1.filter(function(x) {
        if (x % 2 === 0 || x === 0) {
          return true;
        }
      })
      
      console.log(evens);

      【讨论】:

        【解决方案5】:

        const myEvennessFilter = (args) => args.filter(elem => (elem % 2) === 0);
        console.log(myEvennessFilter([1,2,3,4,5,6,7,8,9]));

        【讨论】:

          【解决方案6】:

          要使其运行速度提高 25%,请将“elem%2 == 0”替换为“(elem & 1) === 0”

          // how to filter out even numbers using filter() in js
          let numbers = [1,2,3,4,5,6,7];
          let even_numbers = numbers.filter(elem => elem%2 == 0)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-05-20
            • 1970-01-01
            • 1970-01-01
            • 2016-11-01
            • 2012-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多