You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在嵌套对象数组中使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:15:22