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
相关产品推荐
相关产品推荐

