2017-08-08 61 views
-3

我想獲取特定父項的所有子項。我是新來的Node.js和不能寫遞歸函數做這個任務獲取節點js中特定父項的所有子項

var roots = [1,2,6]; 

var documents = [ 
{ 
    "parent_id":1 
    ,childerens:[4,5] 
} 

,{ 
    "parent_id":4 
    ,childerens:[9] 
} 

,{ 
    "parent_id":9 
    ,childerens:[] 
} 

,{ 
    "parent_id":5 
    ,childerens:[3] 
} 

,{ 
    "parent_id":3 
    ,childerens:[] 
} 

] 

roots.forEach(function (rootParentId) { 
    var allchilderens=getAllchild(rootParentId); 

}) 

這裏是我的意思的例子:

var allchilderens = getAllchild(1); 
allchilderens == [4,5,9,3] 
+0

爲什麼你不能爲此寫一個遞歸函數? – jhpratt

+0

我無法想象遞歸 –

+1

這實際上與Node.JS沒有任何關係。 –

回答

0
function findAllChildren(element,is_root,childerens) { 
    if(is_root==false&&element!=undefined){ 
     childerens.push(element); 
    } 
    var doc = documents.find(o => o.parent_id === element); 
    if(doc["childerens"].length==0){ 
     return []; 
    } 
    else{ 
     doc["childerens"].forEach(function (element) { 
      findAllChildren(element,false,childerens); 
     }) 
    } 
} 

var childerens=[]; 
console.log(findAllChildren(1,true,childerens)); 
console.log("childerens==>",childerens); 
0

你真的想在這裏爲建立一個樹形結構步驟1。

每個對象應,而不是包含兒童ID列表,它應該包含實際的孩子。這樣,當你想要得到所有的孩子時,你可以遍歷那棵樹。

+0

我無法編碼遞歸函數。你認爲我們可以編寫非遞歸函數來完成這個任務嗎? –

+0

感謝您的建議,但我無法更改數據結構 –

0

你可能應該考慮在這裏修改你的數據結構。爲什麼不使用一個對象,其中用戶標識是鍵(因爲它應該是唯一的)。那麼你只需要直接獲取這些密鑰。

數組裏面有一切可能不好,因爲你必須通過數組迭代發現每一個孩子,這將對(在最壞的情況),運行時間等於數組的長度。

相關問題