You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

逻辑说明

你之前遇到的重复条目问题,是旧逻辑同时把子节点放在了根数组和父节点的子列表中导致的:

  1. 本方案先把所有节点按唯一id存入映射,每个节点只会保留一份,从根源避免重复
  2. 只有parentfoldersid为0的一级节点会被放到最终返回的根数组中,其余节点只会出现在对应父节点的childrens字段里
  3. 不限制嵌套层级,也支持任意数量的根文件夹同时存在

结构示例

结构示例图

内容的提问来源于stack exchange,提问作者May Yie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:24:02