回到“空”值从Javascript“过滤器”功能

问题描述 投票:0回答:2

比方说,我有以下阵列:arr = [1, 2, 0, null, 4],我想在阵列中筛选所有的“0”。一个例子代码如下:

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

它工作得很好。但是,如果我使用if语句来代替,不返回“空”值:

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

它只有当我返回包含“价值”的数组的工作原理:

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

任何人可以解释在使用if语句为什么“空”只返回,如果它是一个数组?

javascript arrays
2个回答
5
投票

一个项目将被包括在产生的阵列中如果从filter回调返回的值是truthy。

return val !== 0

将返回false如果val是0,否则true

if(val !== 0) return val

将返回undefined如果val0,并将否则返回val。所以,如果val0,但仍是falsey(如null),它不会被列入结果。

但数组始终truthy(无论什么样的价值观所包含),所以

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

将总是导致被包括在最终的阵列中的非0值。

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

1
投票

那么filter callback应该返回true或false。

不必返回true或false。因此,您的项目转换成一个布尔值。

所以空是falsly数组会truthy。

© www.soinside.com 2019 - 2024. All rights reserved.