使用`arr.flatMap((f) => f ?? [])`时如何删除空元素但不是未定义的?
How to drop null elements but not undefined when using `arr.flatMap((f) => f ?? [])`?
我编写了一个从数组中删除 null
个值的函数:
const dropNull = <T,>(arr: T[]): T[] => {
return arr.flatMap((f) => f ?? []); // depends >= ES2019
};
例如:
const myArr1 = ['foo', 'bar', 'baz', null]
const output1 = dropNull(myArr1)
console.log(output1) // => ["foo", "bar", "baz"]
但是,我意识到它也删除了 undefined
个值。
const myArr2 = ['foo', 'bar', 'baz', null, undefined]
const output2 = dropNull(myArr2)
console.log(output2) // => ["foo", "bar", "baz"]
有没有办法只 调整 当前 dropNull()
以删除 null
而不是 undefined
?也就是说,我知道我 可以将 函数重写为:
const dropNull2 = <T,>(arr:T[]): T[] => {
return arr.filter(element => element !== null)
}
但我喜欢 arr.flatMap((f) => f ?? [])
风格。是否有一个小改动,它只会掉落 null
而不会掉落 undefined
?
您可以改用三元运算符
return arr.flatMap((f) => f === null ? [] : f);
我编写了一个从数组中删除 null
个值的函数:
const dropNull = <T,>(arr: T[]): T[] => {
return arr.flatMap((f) => f ?? []); // depends >= ES2019
};
例如:
const myArr1 = ['foo', 'bar', 'baz', null]
const output1 = dropNull(myArr1)
console.log(output1) // => ["foo", "bar", "baz"]
但是,我意识到它也删除了 undefined
个值。
const myArr2 = ['foo', 'bar', 'baz', null, undefined]
const output2 = dropNull(myArr2)
console.log(output2) // => ["foo", "bar", "baz"]
有没有办法只 调整 当前 dropNull()
以删除 null
而不是 undefined
?也就是说,我知道我 可以将 函数重写为:
const dropNull2 = <T,>(arr:T[]): T[] => {
return arr.filter(element => element !== null)
}
但我喜欢 arr.flatMap((f) => f ?? [])
风格。是否有一个小改动,它只会掉落 null
而不会掉落 undefined
?
您可以改用三元运算符
return arr.flatMap((f) => f === null ? [] : f);