比如说 我想找得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并继续向下遍历,无则清空记录并跳过当前的节点,遍历下一个同层节点。
雷雷
很多人都在抱怨你没有把代码贴出来,能回答问题的人可都是真心的!
简化版实验原始数据(也供其他人可以验证自己的方案)
JS查找输出结果
你可以把代码贴出来么……你这样放个图片很难处理啊……
直接递归遍历啊,先校验id是否相同,相同直接return,不同则看是否有children,有则记录下当前层的id并继续向下遍历,无则清空记录并跳过当前的节点,遍历下一个同层节点。
雷雷