2017-08-08 19 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

第一歩。

各オブジェクトは、子IDのリストを格納する代わりに、実際の子を含む必要があります。そうすれば、すべての子供を欲しがっているときに、その木を横断することができます。

+0

再帰関数を記述できません。皆さんは、このタスクを実行する非再帰関数を書くことができると思いますか? –

+0

アドバイスありがとうが、私はデータ構造を変更することはできません –

0

ここでデータ構造を改訂することを検討する必要があります。オブジェクトを使用しないでください。ここで、ユーザーIDはキーです(ユニークである必要があるため)。次に、それらのキーを直接取得する必要があります。

配列のすべてを持つことは潜在的に悪いです。なぜなら、最悪の場合、配列の長さに等しいランタイムを持つ各子を見つけるために配列を反復処理する必要があるからです。

関連する問題