【发布时间】: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需要一个布尔值,你不需要返回值 -
该函数的目的是移动数组末尾的所有零,同时保留其他元素的顺序。这只是一个练习,但我想知道为什么过滤器方法会这样。
-
因为
0是falsey。因此,当您执行return 0时,它与return false相同,这意味着它不会被添加。
标签: javascript arrays regex typeof