Node.js如何根据hierarchylevel与parentfoldersid重构层级响应数据
实现代码
直接替换你原有逻辑即可,可解决重复条目问题,同时支持多根节点、任意层级嵌套:
const res1 = results.rows // 以id为key建立节点映射,用于快速查找父节点 const nodeMap = {} // 最终返回的根节点数组 const rootList = [] // 第一步:初始化所有节点,统一存入映射 res1.forEach(item => { nodeMap[item.id] = { id: item.id, name: item.name, hierarchylevel: item.hierarchylevel, parentfoldersid: item.parentfoldersid, childrens: [] // 若需要用children作为字段名可自行修改 } }) // 第二步:关联父子节点关系 Object.values(nodeMap).forEach(node => { const parentId = node.parentfoldersid // parentfoldersid为0判定为根节点,直接加入根数组 if (parentId === 0) { rootList.push(node) return } // 非根节点则加入对应父节点的子列表中 if (nodeMap[parentId]) { nodeMap[parentId].childrens.push(node) } }) res.status(200).json(rootList)
逻辑说明
你之前遇到的重复条目问题,是旧逻辑同时把子节点放在了根数组和父节点的子列表中导致的:
- 本方案先把所有节点按唯一id存入映射,每个节点只会保留一份,从根源避免重复
- 只有
parentfoldersid为0的一级节点会被放到最终返回的根数组中,其余节点只会出现在对应父节点的childrens字段里 - 不限制嵌套层级,也支持任意数量的根文件夹同时存在
结构示例

内容的提问来源于stack exchange,提问作者May Yie
相关产品推荐
相关产品推荐

