如何循环嵌套对象数组并按顺序提取所有层级的ID
如何循环遍历嵌套对象数组并按顺序提取所有ID
给定如下嵌套结构的对象数组,需要遍历任意层级的子对象数组,按顺序提取所有id值:
let data = [{ "id": "1", "child": [ { "id": "12", "child": [ { "id": "123", "child": [ { "id": "1234" } ] } ] }, { "id": "2", "child": [ { "id": "22" } ] }, { "id": "3" }, { "id": "4", "child": [ { "id": "42", "child": [ { "id": "43" } ] } ] } ] }]
预期输出
[1,12,123,1234,2,22,3,4,42,43]
我的尝试代码无法运行,尚未理清逻辑:
result.reduce((pv, cv) => { console.log(cv) let temp = cv let arr = [] if(temp.hasOwnProperty("split")){ arr = temp.split pv.push(temp.id) // again arr should loop, I'm still finding some logic! } return pv }, [])
核心逻辑步骤
这是典型的深度优先遍历场景,用递归即可解决,步骤如下:
- 准备一个空数组,用来存放最终收集到的所有ID
- 编写一个递归处理函数,参数为单个对象:
- 将当前对象的
id转为数字(如果需要字符串则跳过转换),添加到结果数组 - 检查当前对象是否有
child属性,且child是一个非空数组 - 如果存在合法的
child数组,遍历数组中的每一个子对象,依次调用这个递归函数
- 将当前对象的
- 遍历原始的根数组,对每个根对象执行上述递归函数
- 最终结果数组就是按顺序排列的所有ID
注意:原始代码存在语法错误(比如
let = [...]缺少变量名、部分对象括号未闭合),需要先修正这些问题才能正常运行代码。
内容的提问来源于stack exchange,提问作者Vikas Acharya
相关产品推荐
相关产品推荐

