JavaScript中如何将树形结构JSON转换为嵌套对象
树形结构JSON反向转嵌套对象实现方案
核心转换逻辑采用递归遍历实现,和正向嵌套对象转树的逻辑完全对应,处理规则如下:
- 遍历当前层级的所有树节点
- 对每个节点,提取
name字段作为父对象的键名,提取children字段作为待递归处理的子节点列表,节点其余属性直接保留为该键对应对象的自有属性 - 若当前节点存在非空
children数组,递归执行转换逻辑处理所有子节点,将子节点转换结果合并到当前节点对象中 - 所有节点处理完成后返回当前层级的结果对象
实现代码(JavaScript)
function treeToNested(treeList) { const res = {} for (const node of treeList) { // 分离name、children和节点自有属性 const { name, children, ...nodeProps } = node const current = { ...nodeProps } // 存在子节点则递归处理,合并结果到当前节点 if (children?.length) { Object.assign(current, treeToNested(children)) } res[name] = current } return res } // 调用示例 const input = [ { "name": "DI", "children": [ { "name": "t", "children": [ {"name": "tID", "ir": true, "is": false}, {"name": "tTime", "ir": false, "is": false} ], "ir": false, "is": false }, { "name": "i", "children": [ {"name": "idu", "ir": false, "is": false}, {"name": "il", "ir": false, "is": false}, { "name": "ibId", "children": [ {"name": "ib1", "ir": false, "is": false}, {"name": "ib2", "ir": false, "is": false} ], "ir": false, "is": false } ], "ir": false, "is": false } ] } ] const result = treeToNested(input)
注意事项
你给出的预期输出示例中,idu节点下存在重复的ir键,属于笔误。上述代码转换后的结果会严格保留节点原有属性,不会出现重复键问题,结构和你预期的嵌套格式完全一致。
内容的提问来源于stack exchange,提问作者PK2995
相关产品推荐
相关产品推荐

