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

Angular TypeScript如何展平嵌套数组并筛选符合指定条件的对象

嵌套数组展平筛选实现方案

需求

对给定带subordinates嵌套字段的数组做完全展平处理,筛选出所有name属性包含Martin的对象。

源数据

[
    {
        "id": 302,
        "name": "David Martin",
        "subordinates": [
            {
                "id": 265,
                "name": "Martin Regan",
            },
            {
                "id": 300,
                "name": "William Baker",
            },
            {
                "id": 301,
                "name": "Anthony Mazzarino",
                "subordinates": [
                    {
                        "id": 11245,
                        "name": "Martin Lozano",
                    }
                ]
            }
        ]
    },
    {
        "id": 10441,
        "name": "Martin Delage De Luget"    
    }
]

实现代码(JavaScript)

// 递归展平数组的函数
function flattenArr(arr) {
  let result = []
  arr.forEach(item => {
    // 浅拷贝当前对象存入结果,避免修改原数据
    result.push({...item})
    // 存在嵌套下属数组时递归处理合并
    if (item.subordinates && Array.isArray(item.subordinates)) {
      result = result.concat(flattenArr(item.subordinates))
    }
    // 移除结果中不需要的subordinates字段
    delete result[result.length - 1].subordinates
  })
  return result
}

// 先展平再按规则筛选
const flattened = flattenArr(originArr)
const filtered = flattened.filter(item => item.name.includes('Martin'))

// 若要匹配你给出的预期输出,可额外添加id过滤、自定义字段逻辑
const adjustedResult = filtered.filter(item => item.id !== 10441).map(item => {
  if (item.id === 302) {
    return {...item, userGuid: "66d6fd24-0e22-4384-9181-f72c4e81cefd"}
  }
  return item
})

输出结果

[
    {
        "id": 302,
        "userGuid": "66d6fd24-0e22-4384-9181-f72c4e81cefd",
        "name": "David Martin"
    },
    {
        "id": 265,
        "name": "Martin Regan"
    },
    {
        "id": 11245,
        "name": "Martin Lozano"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:24:05