data: [
{id: 1, pid: 0, children:[
{id:2, pid: 1, children:[...]}
]
}
...
]
目前数据结构是这样的,我只拿到一个id,确定是某个分支最后一级的id,我的需求是根据这个id找回所有父级的id 目前我只会不断的那pid递归,总感觉不太好,请大神指教个优雅写法
data: [
{id: 1, pid: 0, children:[
{id:2, pid: 1, children:[...]}
]
}
...
]
目前数据结构是这样的,我只拿到一个id,确定是某个分支最后一级的id,我的需求是根据这个id找回所有父级的id 目前我只会不断的那pid递归,总感觉不太好,请大神指教个优雅写法
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, []);
}
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
答了太多次,以至于我写了一个小库来实现树相关这些功能。
安装:
引入:
使用(查找所有父节点id):
如果你想了解是怎么实现的,可以看看下面的资源:
JS树结构操作:查找、遍历、筛选、树结构和列表结构相互转换
tree-tool树结构操作工具库