树结构,如何用子级id获取所有父级

data: [
    {id: 1, pid: 0, children:[ 
        {id:2, pid: 1, children:[...]}
        ]
    }
    ...
]

目前数据结构是这样的,我只拿到一个id,确定是某个分支最后一级的id,我的需求是根据这个id找回所有父级的id 目前我只会不断的那pid递归,总感觉不太好,请大神指教个优雅写法

阅读 9.2k
2 个回答

答了太多次,以至于我写了一个小库来实现树相关这些功能。

安装:

npm install tree-tool

引入:

import treeTool from 'tree-tool'

使用(查找所有父节点id):

const pathList = treeTool.findPath(data, n => n.id == id) // pathList所有父级data组成的
const idList = pathList.map(n => n.id) // idList即为所求

如果你想了解是怎么实现的,可以看看下面的资源:
JS树结构操作:查找、遍历、筛选、树结构和列表结构相互转换
tree-tool树结构操作工具库

function getParentIds(id, data) {
  // 深度遍历查找
  function dfs(data, id, parents) {
    for(var i = 0;i<data.length;i++) {
      var item = data[i];
      // 找到id则返回父级id
      if(item.id === id) return parents;
      // children不存在或为空则不递归
      if(!item.children || !item.children.length) continue;
      // 往下查找时将当前id入栈
      parents.push(item.id);
      
      if(dfs(item.children, id, parents).length ) return parents;
      // 深度遍历查找未找到时当前id 出栈
      parents.pop()
    }
    // 未找到时返回空数组
    return [];
  }
  
  return dfs(data, id, []);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题