我很好奇为什么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 ]
感谢您的帮助!
答案 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 ]));