如何将嵌套对象数组转换为含叶子节点路径映射的目标数组?
实现方案
思路
通过递归遍历嵌套对象,跟踪每个节点的祖先ID路径。当遇到没有children属性的叶子节点时,将该节点的ID作为键,祖先ID路径作为值,生成目标对象并加入结果数组。
代码实现
function convertNestedArray(tempArr) { const result = []; function traverse(node, path) { if (node.children) { // 递归遍历子节点,将当前ID加入路径 traverse(node.children, [...path, node.id]); } else { // 叶子节点,生成映射对象 result.push({ [node.id]: path }); } } // 处理输入数组中的每个根节点 tempArr.forEach(item => traverse(item, [])); return result; } // 测试示例 let tempArr = [ { id:1, children:{ id:2, children:{ id:100 } } } ]; const arr = convertNestedArray(tempArr); console.log(arr); // 输出: [ { 100: [ 1, 2 ] } ]
说明
- 递归函数
traverse负责深度遍历嵌套结构,每次进入子节点时都会复制当前路径并添加父节点ID,避免路径引用混乱。 - 支持输入数组包含多个根节点,以及任意深度的嵌套层级。
- 当节点存在
children属性时继续遍历,否则将当前叶子节点的ID和路径存入结果。
内容的提问来源于stack exchange,提问作者Олег З
相关产品推荐
相关产品推荐

