簡體   English   中英

Javascript遞歸函數獲取給定節點的所有子節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM