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

Javascript如何从嵌套JSON结构中提取所有level3.id生成新数组

实现方案

你给出的JSON结构外层需要补全为对象格式才能正常解析,假设完整数据挂载在变量data下:

const data = {
  "level1": [
    {
        "id":"0",
        "index":"0",
        "label":"Level 1 Label a",
        "level2":[
            {
            "id":"0",
            "index":"0",
            "label":"Level 2 Label 1a",
            "level3":[
                {"id":"UniqueId1","index":"0","label":"Level 3 Label 00a"}
            ]
            },
            {
            "id":"1",
            "index":"1",
            "label":"Level 2 Label 1b",
            "level3":[
                {"id":"UniqueId2","index":"0","label":"Level 3 Label 00b"}
            ]
        }]
    },
    {
        "id":"1",
        "index":"1",
        "label":"Level 1 Label b",
        "level2":[
            {
            "id":"0",
            "index":"0",
            "label":"Level 2 Label 2a",
            "level3":[
                {"id":"UniqueId3","index":"0","label":"Level 3 Label a"}
            ]
            },
            {
            "id":"1",
            "index":"1",
            "label":"Level 22 Label",
            "level3":[
                {"id":"UniqueId4","index":"0","label":"Level 3 Label b"}
            ]
        }]
    }
  ]
}

固定层级结构最优方案(推荐)

如果你的嵌套层级是固定的三层结构,用flatMap+map组合是最优选择,比单独使用map后再手动扁平化数组更简洁高效:

const level3Ids = data.level1.flatMap(level1Item => 
  level1Item.level2.flatMap(level2Item => 
    level2Item.level3.map(level3Item => level3Item.id)
  )
)

运行后输出结果和你预期完全一致:["UniqueId1", "UniqueId2", "UniqueId3", "UniqueId4"]

灵活通用方案

如果后续嵌套层级可能发生变化,或者需要适配不同结构的嵌套数据,可以用递归实现通用提取逻辑:

function extractTargetLevelIds(sourceArr, targetLevel, idKey = 'id') {
  const result = []
  for (const item of sourceArr) {
    // 匹配到目标层级就提取id
    if (Array.isArray(item[targetLevel])) {
      result.push(...item[targetLevel].map(targetItem => targetItem[idKey]))
    }
    // 遍历所有数组类型属性向下递归
    for (const key in item) {
      if (Array.isArray(item[key])) {
        result.push(...extractTargetLevelIds(item[key], targetLevel, idKey))
      }
    }
  }
  return result
}

// 调用示例
const level3Ids = extractTargetLevelIds(data.level1, 'level3')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:18:02