例如我想找得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並繼續向下遍歷,無則清空記錄並跳過當前的節點,遍歷下一個同層節點。
雷雷