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

如何移除嵌套数组exampleArray中的空对象?Filter方法尝试失败

解决方法:移除嵌套数组中的空对象

首先得指出你代码里的两个核心问题:

  • 你用了外层的filter来处理exampleNest,但这个方法是用来筛选exampleNest数组本身的元素,而不是修改每个元素内部的exampleArray。也就是说,你现在的代码是在判断要不要保留exampleNest里的某个对象,而不是去清理这个对象里的exampleArray。
  • 用attachment !== {}判断空对象完全无效,因为JavaScript里对象是引用类型,哪怕都是空对象,它们的引用地址也不一样,这个判断永远会返回true,所以你的内层filter根本没起到过滤空对象的作用。

正确的实现方式

我们需要用map遍历exampleNest的每个元素,保留原对象的所有属性,同时对exampleArray做过滤处理,用Object.keys(attachment).length !== 0来准确判断对象是否为空。

完整代码示例:

// 你的原始数据(注意要给name加引号,否则会报错)
const exampleNest = [{ 
  property1: {}, 
  property2: [], 
  exampleArray: [
    { id: 1, name: 'test' }, 
    { id: 1, name: 'test' }, 
    {}
  ], 
}];

// 生成处理后的新数组(不修改原数据,推荐这种 immutable 的方式)
const updatedNest = exampleNest.map(item => ({
  ...item, // 复制原对象的所有属性
  exampleArray: item.exampleArray.filter(attachment => {
    // 过滤掉空对象
    return Object.keys(attachment).length !== 0;
  })
}));

console.log(updatedNest);
// 输出结果:exampleArray里只剩下两个带id和name的对象,空对象被移除

如果你需要直接修改原数组(不推荐,尽量保持数据不可变)

如果业务场景要求必须修改原数据,可以用forEach遍历并更新每个元素的exampleArray:

exampleNest.forEach(item => {
  item.exampleArray = item.exampleArray.filter(attachment => Object.keys(attachment).length !== 0);
});

额外说明

如果你的空对象可能存在不可枚举属性(这种情况很少见),可以用更严谨的判断方式:

return Object.getOwnPropertyNames(attachment).length !== 0;

不过绝大多数业务场景下,Object.keys的判断已经足够用了。

内容的提问来源于stack exchange,提问作者Legeo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:00:09