如何从JS数组中删除不同类型的空值(元素)?

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

有一个阵列

const arr = [1, 'abc', [], ['John'], {}, {name: 'Smith'}, null, 0];

如何在没有空值的情况下得到新的数组呢(空数组和空对象也算空值)。

我的变式似乎有点硬邦邦的。

const newArr = arr.filter(elem => 
            (elem && Object.keys(elem).length !== 0) 
            || (typeof(elem) == 'number' && elem !== 0));

能否写少一点或简单一点的条件?

javascript arrays filter is-empty
3个回答
1
投票

对于 假的 值、空对象和数组,你必须使用这部分。

elem && Object.keys(elem).length !== 0

但你可以把它最小化,比如:

elem && Object.keys(elem).length

作为任何值 length > 0将返回为 真性情.

同时,你也可以将数字逻辑最小化,比如。

arr.filter(elem => Number(elem));

所以,最终的版本将是这样的:

const arr = [1, 'abc', [], ['John'], {}, {name: 'Smith'}, null, 0];
const newArr = arr.filter(a => (a && Object.keys(a).length) || Number(a));
console.log(newArr)

2
投票

如果你有特定的变体,你可以尝试一下。

const emptyVariants = ['', 0, null,] // all expected variants
const newArr = arr.filter(elem => !emptyVariants.includes(elem);

你可以尝试的另一个方法是使用 != 但它需要所有虚假的价值

const newArr = arr.filter(elem => (elem != null));

更多信息见 !=== 经营者 https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceOperatorsComparison_Operators。


1
投票

这个怎么样?

 arr.filter(i => (typeof i === 'number') || (i && i.length>0) || (( i && Object.keys(i).length)>0) || (i===0));
© www.soinside.com 2019 - 2024. All rights reserved.