扫码关注官方订阅号
比如说 我想找得id为4,就应该返回 [1,3,4]想找得id 为9 该返回 [1,3,9]想找得id为7 改返回 [6,7]
不知道我说明白没有。谢谢解答啊
很多人都在抱怨你没有把代码贴出来,能回答问题的人可都是真心的!简化版实验原始数据(也供其他人可以验证自己的方案)
var nodes = [ { "id": 1, "children": [ { "id": 3, "children": [ {"id": 4}, {"id": 9} ] }, { "id": 10 }, ] }, { "id": 2 }, { "id": 6, "children" : [ { "id": 5}, { "id": 7}, { "id": 8} ] } ];
JS查找输出结果
//递归实现 //@leafId 为你要查找的id, //@nodes 为原始Json数据 //@path 供递归使用,不要赋值 function findPathByLeafId(leafId, nodes, path) { if(path === undefined) { path = []; } for(var i = 0; i < nodes.length; i++) { var tmpPath = path.concat(); tmpPath.push(nodes[i].id); if(leafId == nodes[i].id) { return tmpPath; } if(nodes[i].children) { var findResult = findPathByLeafId(leafId, nodes[i].children, tmpPath); if(findResult) { return findResult; } } } } //用法 console.log(findPathByLeafId(4, nodes)); //输出 [1,3,4] console.log(findPathByLeafId(9, nodes)); //输出 [1,3,9] console.log(findPathByLeafId(7, nodes)); //输出 [6,7]
你可以把代码贴出来么……你这样放个图片很难处理啊……
直接递归遍历啊,先校验id是否相同,相同直接return,不同则看是否有children,有则记录下当前层的id并继续向下遍历,无则清空记录并跳过当前的节点,遍历下一个同层节点。
function solution(arr,id){ var ans=[]; var flag=false; function dps(obj,depth){ ans[depth]=obj.id; if(obj.id==id){ flag = true; }else{ if(obj.children) for(var i=0;i<obj.children.length;i++){ flag = dps(obj.children[i],depth+1); if(flag) break; } } if(flag) return flag; ans[depth]=undefined; } arr.forEach(function(a){if(dps(a,0))return;}) return ans.filter(function(obj){return undefined!=obj;}); }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
很多人都在抱怨你没有把代码贴出来,能回答问题的人可都是真心的!
简化版实验原始数据(也供其他人可以验证自己的方案)
JS查找输出结果
你可以把代码贴出来么……你这样放个图片很难处理啊……
直接递归遍历啊,先校验id是否相同,相同直接return,不同则看是否有children,有则记录下当前层的id并继续向下遍历,无则清空记录并跳过当前的节点,遍历下一个同层节点。