如何从 JS 数组中删除不同类型的空值(元素)
How to remove different types of empty values (elements) from JS array
有数组
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));
是否可以写更少或更简单的条件?
如果您有特定的变体,您可以尝试
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.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
这个怎么样?
arr.filter(i => (typeof i === 'number') || (i && i.length>0) || (( i && Object.keys(i).length)>0) || (i===0));
对于 falsy 值,空对象和数组你必须使用这部分:
elem && Object.keys(elem).length !== 0
但是你可以像这样最小化它:
elem && Object.keys(elem).length
因为 length
> 0 的任何值都将 return 作为 truthy.
此外,您可以最小化数字逻辑,例如:
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 arr = [1, 'abc', [], ['John'], {}, {name: 'Smith'}, null, 0];
如何获取没有空值的新数组? (空数组和空对象也算作空值)
我的变体似乎有点硬编码:
const newArr = arr.filter(elem =>
(elem && Object.keys(elem).length !== 0)
|| (typeof(elem) == 'number' && elem !== 0));
是否可以写更少或更简单的条件?
如果您有特定的变体,您可以尝试
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.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
这个怎么样?
arr.filter(i => (typeof i === 'number') || (i && i.length>0) || (( i && Object.keys(i).length)>0) || (i===0));
对于 falsy 值,空对象和数组你必须使用这部分:
elem && Object.keys(elem).length !== 0
但是你可以像这样最小化它:
elem && Object.keys(elem).length
因为 length
> 0 的任何值都将 return 作为 truthy.
此外,您可以最小化数字逻辑,例如:
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)