【问题标题】:Why won't the if-statements return values of type boolean and object?为什么 if 语句不返回 boolean 和 object 类型的值?
【发布时间】:2017-07-20 01:34:59
【问题描述】:

我很好奇为什么过滤方法中的 else if 语句不返回任何内容:

var moveZeros = function (arr) {
  const nonZeros = arr.filter(value => {
    if (value !== 0) return value
    else if (typeof value === 'boolean') return value
    else if (typeof value === 'object') return value
  })

  const zeros = arr.toString().match(/0/g).map(Number)

  const newArr = nonZeros.concat(zeros) 

  return newArr
}

另外,我还想知道为什么当我尝试从数组中过滤掉零时会得到类似的效果:

const zeros = arr.filter(value => {
  if (value === 0) return value
})

这是一个测试函数的示例数组:

[ 0, 1, null, 2, false, 1, 0 ]

感谢您的帮助!

【问题讨论】:

  • 你想做什么? filter 需要一个布尔值,你不需要返回值
  • 该函数的目的是移动数组末尾的所有零,同时保留其他元素的顺序。这只是一个练习,但我想知道为什么过滤器方法会这样。
  • 因为0falsey。因此,当您执行return 0 时,它与return false 相同,这意味着它不会被添加。

标签: javascript arrays regex typeof


【解决方案1】:

filter 方法中不需要返回值,如果应该选择该值,则返回应该为 true 的布尔值,如下所示:

var moveZeros = function (arr) {
// also when you use !== 0, you don't need to check the type as it compares type
  const nonZeros = arr.filter(value => value !== 0)
  const zeros = arr.filter(value => value === 0)

  const newArr = nonZeros.concat(zeros) 
  return newArr
}

console.log(moveZeros([ 0, 1, null, 2, false, 1, 0 ]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    相关资源
    最近更新 更多