从Javascript“过滤器”函数返回“空”值

时间:2019-02-08 23:50:56

标签: javascript arrays

假设我有以下数组:arr = [1, 2, 0, null, 4],并且我想过滤数组中的所有“ 0”。 示例代码为:

arr.filter((val) => {return val !== 0})
//>> [1, 2, null, 4]

效果很好。但是,如果我改用if语句,则不会返回“ null”值:

arr.filter((val) => {if(val !== 0) return val})
//>> [1, 2, 4]

仅当我返回包含“值”的数组时,它才有效:

arr.filter((val) => {if(val !== 0) return [val]})
//>> [1, 2, null, 4]

有人可以解释为什么在使用if语句时,如果仅在数组中返回“ null”吗?

2 个答案:

答案 0 :(得分:5)

如果filter回调返回的值为真,则该项目将包含在结果数组中。

return val !== 0

如果false为0,则返回val,否则返回true

if(val !== 0) return val
如果undefinedval

将返回0,否则将返回val。因此,如果val不是0,但仍然是假的(例如null),则它将不包含在结果中。

但是数组总是真实的(无论它们包含什么值),所以

if(val !== 0) return [val]}

总是会导致非0值包含在最终数组中。

console.log(Boolean(null));
console.log(Boolean([null]));

答案 1 :(得分:1)

filter callback应该返回true或false。

您没有返回true或false。因此它将您的项目转换为布尔值。

所以null显然是一个数组。

相关问题