为什么if-statement返回boolean和object类型的值?

时间:2017-07-20 01:35:00

标签: javascript arrays regex typeof

我很好奇为什么filter方法中的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 ]

感谢您的帮助!

1 个答案:

答案 0 :(得分: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 ]));