如何在嵌套对象数组中使用forEach筛选移除含null属性的元素
解决嵌套数组对象的筛选问题
没问题,我来帮你搞定这个需求——咱们要把data数组里每个对象的b数组中,c属性为null的元素都去掉对吧?
先看你的原始数据:
var data = [ { a: 1, b: [{ c: null, d: 10 }, { c: 10, d: 10 }] }, { a: 2, b: [{ c: null, d: 10 }, { c: 10, d: 10 }, { c: 13, d: 1 }] }, { a: 6, b: [{ c: null, d: 10 }, { c: 10, d: 10 }, { c: null, d: 10 }] } ];
解决方案代码
我们可以用Array.map()遍历外层的每个对象,再用Array.filter()过滤内层b数组里不符合条件的元素,这样不会修改原始数据(如果需要修改原数据的话也可以调整写法):
// 生成新的处理后数组,不修改原data const filteredData = data.map(item => ({ ...item, // 复制原对象的所有属性 b: item.b.filter(subItem => subItem.c !== null) // 过滤b数组中c为null的元素 })); console.log(filteredData);
代码解释
map():遍历外层的每个对象,返回一个新对象,这样不会破坏原数组的数据。...item:用扩展运算符复制原对象的所有属性(比如这里的a属性),保证其他数据不受影响。filter():对内层的b数组进行筛选,只保留c属性不等于null的元素,自动移除掉c: null的对象。
运行结果
处理后的filteredData会变成:
[ { a: 1, b: [{ c: 10, d: 10 }] }, { a: 2, b: [{ c: 10, d: 10 }, { c: 13, d: 1 }] }, { a: 6, b: [{ c: 10, d: 10 }] } ]
如果一定要修改原始数据(不推荐,因为会污染原数据),可以这样写:
// 修改原数组的每个对象的b属性 data.forEach(item => { item.b = item.b.filter(subItem => subItem.c !== null); });
这样就完美解决你的需求啦~
内容的提问来源于stack exchange,提问作者D_S_X
相关产品推荐
相关产品推荐

