有一个阵列
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));
能否写少一点或简单一点的条件?
对于 假的 值、空对象和数组,你必须使用这部分。
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)
如果你有特定的变体,你可以尝试一下。
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。
这个怎么样?
arr.filter(i => (typeof i === 'number') || (i && i.length>0) || (( i && Object.keys(i).length)>0) || (i===0));