求教:如何过滤对象数组,移除包含null属性的对象?
解决数组过滤:移除含null属性的对象
我来帮你梳理下问题出在哪,再给你正确的实现方式~
首先看你写的代码,问题主要有两点:
- 你用了
some方法,这个方法的逻辑是只要有一个元素满足条件就返回true。这意味着哪怕对象里有一个null属性,只要还有其他非null的属性,这个对象就会被保留下来,完全和你要移除所有带null属性对象的需求相反。 - 你在
some的回调里返回doc是错误的,这类数组迭代方法的回调需要返回布尔值来判断条件,而不是返回整个对象。
正确的实现方式
我们需要的是保留所有属性值都不为null的对象,所以应该用every方法——它会检查数组里的每一个元素是否都符合条件,只有全部满足时才返回true。
代码示例:
// 完整写法 const noNull = data.filter((doc) => { return Object.values(doc).every(prop => prop !== null); }); // 更简洁的箭头函数写法 const noNull = data.filter(doc => Object.values(doc).every(prop => prop !== null));
额外补充
如果你的场景里还需要排除属性值为undefined的对象,可以把判断条件改成prop != null(注意是双等号,这个表达式会同时匹配null和undefined):
const noNull = data.filter(doc => Object.values(doc).every(prop => prop != null));
内容的提问来源于stack exchange,提问作者AdamSulc
相关产品推荐
相关产品推荐

