[英]Javascript recursive function to get all children for given node
我寫了一個遞歸函數來獲取所有孩子(以及每個孩子的孩子等等)。 但是我無法從函數返回正確的值。 我看到該函數實際上列出了我想要的數據,但不知何故我無法從 for 循環中返回它。
let data = [ { "nodeId": "root", "name": "ROOT", "parentNodeId": null }, { "nodeId": "1", "name": "one", "parentNodeId": "root" }, { "nodeId": "2", "name": "Two", "parentNodeId": "1" }, { "nodeId": "31", "name": "three", "parentNodeId": "2" }, { "nodeId": "32", "name": "three-2", "parentNodeId": "2" }, { "nodeId": "33", "name": "three-3", "parentNodeId": "2" }, { "nodeId": "41", "name": "four 2-1", "parentNodeId": "32" }, { "nodeId": "51", "name": "five 2-1-1", "parentNodeId": "41" }, { "nodeId": "61", "name": "six 2-1-1-1", "parentNodeId": "51" }, { "nodeId": "62", "name": "six 2-1-1-2", "parentNodeId": "51" }, { "nodeId": "71", "name": "seven 2-1-1-2-1", "parentNodeId": "62" }, { "nodeId": "81", "name": "eight 2-1-1-2-1-1", "parentNodeId": "71" }, { "nodeId": "91", "name": "nine 2-1-1-2-1-1-1", "parentNodeId": "81" }, { "nodeId": "101", "name": "ten 2-1-1-2-1-1-1-1", "parentNodeId": "91" }, { "nodeId": "111", "name": "eleven 2-1-1-1-1", "parentNodeId": "101" } ] function test(entities, id, result = []) { const childrens = entities.filter(x => x.parentNodeId === id) if (childrens.length === 0) { console.log('inside1', result) return result } result = [...result, ...childrens] for (const ele of childrens) { test(entities, ele.nodeId, result) } } const out = test(data, '32') console.log('out', out)
如果我在下面的函數中傳遞 '32',我想得到 32 及其所有子項。 所以它應該排除 root、1、2、31 和 33。遞歸函數應該返回 32 及以下的所有內容。
您需要在 for 循環中更新結果數組並返回更新后的數組:
function test(entities, id, result = []) {
const childrens = entities.filter(x => x.parentNodeId === id);
if (childrens.length === 0) {
return result;
}
result = [...result, ...childrens];
for (const ele of childrens) {
result = test(entities, ele.nodeId, result);
}
return result;
}
const out = test(data, '32');
console.log('out', out);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.