假设我有以下数组: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”吗?
答案 0 :(得分:5)
如果filter
回调返回的值为真,则该项目将包含在结果数组中。
return val !== 0
如果false
为0,则返回val
,否则返回true
。
if(val !== 0) return val
如果undefined
是val
,将返回0
,否则将返回val
。因此,如果val
不是0
,但仍然是假的(例如null
),则它将不包含在结果中。
但是数组总是真实的(无论它们包含什么值),所以
if(val !== 0) return [val]}
总是会导致非0
值包含在最终数组中。
console.log(Boolean(null));
console.log(Boolean([null]));
答案 1 :(得分:1)