如何移除数组对象中的null值?现有过滤代码失效求排查
问题分析与解决方案
原代码的问题
- 你误用了
Array.filter()的作用:这个方法是用来筛选整个数组中的元素(也就是每个完整的对象),而非修改对象内部的子数组。 - 你的判断条件
object.test !== null完全无效:每个对象的test属性本身是数组,永远不会等于null,所以这个过滤操作相当于直接返回了原数组,根本没处理test里的null值。
正确实现方式
要实现移除每个对象test数组内的null,需要遍历数组中的每个对象,单独对test数组执行过滤操作:
方式1:不修改原数组(推荐,避免污染原数据)
const filtered = fullArray.map(obj => { return { ...obj, // 浅拷贝原对象的所有属性 test: obj.test.filter(item => item !== null) // 过滤test数组里的null元素 }; });
方式2:直接修改原数组
如果不需要保留原数组,可以直接遍历修改:
fullArray.forEach(obj => { obj.test = obj.test.filter(item => item !== null); });
说明
map()会遍历原数组,返回一个包含新对象的数组,原数组不会被改动。- 真正实现过滤
null的是obj.test.filter(item => item !== null),这一步才是针对子数组内部的元素进行筛选。
内容的提问来源于stack exchange,提问作者jay7777
相关产品推荐
相关产品推荐

