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

JavaScript中过滤子元素时如何返回含符合条件子项的父对象

实现嵌套数组按子项过滤并保留父结构

你之前用flatMap+filter只拿到子元素,是因为写法逻辑直接返回了过滤后的子项,flatMap会把返回的子数组拍平成一维,自然丢失了外层父对象结构,错误写法一般类似这样:

// 错误写法:直接返回过滤后的子数组,拍平后只剩子项
const wrongResult = array.flatMap(parent => parent.childBrands.filter(child => child.status === 'active'))

推荐写法:map + 内部filter(可读性最高,无副作用)

遍历所有父对象,对每个父对象做浅拷贝避免修改原数据,不要直接在原父对象上修改childBrands属性,会污染原始数组数据,再将内部childBrands替换为按状态过滤后的子数组即可:

const filteredArray = array.map(parent => {
  return {
    // 保留父对象所有原有属性
    ...parent,
    // 覆盖childBrands为过滤后的结果
    childBrands: parent.childBrands.filter(child => child.status === 'active')
  }
})

运行上述代码得到的结果和你给出的预期结果完全一致。

可选拓展:过滤掉无匹配子项的父对象

如果需要把过滤后childBrands为空的父对象也移除,可以在后面追加一层filter:

const filteredArray = array
  .map(parent => ({
    ...parent,
    childBrands: parent.childBrands.filter(child => child.status === 'active')
  }))
  // 只保留存在有效子品牌的父项
  .filter(parent => parent.childBrands.length > 0)

说明:上述写法用展开运算符做浅拷贝,不会修改原始数组的内容,如果你的父对象或者子对象有更深层的嵌套属性,可以根据需求换成深拷贝逻辑,大部分业务场景下浅拷贝足够使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:45:29