2017-08-19 16 views
-2

Iは、オブジェクトの2つのアレイ 第アレイ2つのオブジェクトの配列をツリー構造で連結するにはどうすればよいですか?

 

    [ 
     { 
     value: 'Node 1', 
     id: 1, 
     childs: [ 
      { 
      value: 'Node 2', 
      id : 2, 
      childs: [ 
       { 
       value: 'Node 3', 
       id: 3 
       }, 
       { 
       value: 'Node 4', 
       id: 4   
       } 
      ] 
      } 
     ] 
     } 
    ] 

と二番目の配列

 

    [ 
     { 
     value: 'Node 1', 
     id: 1, 
     childs: [ 
      { 
      value: 'Node 5', 
      id : 5 
      } 
     ] 
     } 
    ] 

を有し、iはツリー構造内のオブジェクトのこれらの配列を連結する方法を理解していません。 は私が

 

    [ 
     { 
     value: 'Node 1', 
     id: 1, 
     childs: [ 
      { 
      value: 'Node 2', 
      id : 2, 
      childs: [ 
       { 
       value: 'Node 3', 
       id: 3 
       }, 
       { 
       value: 'Node 4', 
       id: 4   
       } 
      ] 
      }, 
      { 
      value: 'Node 5', 
      id : 5 
      } 
     ] 
     } 
    ] 

この結果を必要とし、これらの配列は、より困難になるとより多くのチャイルズを持つことができます。

どうすればいいですか?

+0

申し訳ありませんが、私はこれはAngularJS疑問である理由を確認するために失敗します。 –

+0

yeah申し訳ありませんが、私はangularjsでそれを行いますが、それはちょうどJS – Anwin

+0

@Farsay彼は彼が得たいものを入れましたが、彼は今まで彼が試したコード –

答えて

0

あなたはconcat()メソッドを探しています。

array1[0].children.concat(array2[0].children); 
1

このArray#forEach機能を試してみて、Array#filter

var arr = [ { value: 'Node 1', id: 1, childs: [ { value: 'Node 2', id : 2, childs: [ { value: 'Node 3', id: 3 }, { value: 'Node 4', id: 4 
 
} ] } ] } ]; 
 
var arr2= [ { value: 'Node 1', id: 1, childs: [ { value: 'Node 5', id : 5 } ] } ] 
 

 
arr.forEach(function(a){ 
 
    var k =arr2.filter(i=> a.value == i.value); 
 
    a.childs.push(...k[0].childs) 
 
    }) 
 
    
 
console.log(arr)

+0

それは近いですが、私は2番目の配列を変更し、 2 と私はノード1->ノード2->ノード4を持っています 2つの要素のノード2を取得します。 たとえばhttps://jsfiddle.net/LLqvnesa/ – Anwin

1

あなたがのためにIDをハッシュすることによって、反復や再帰的なアプローチを使用することができます。See this. だからあなたのコードは次のようになります。実際のレベル。

function update(target, source) { 
 
    var hash = Object.create(null); 
 
    target.forEach(function (o) { 
 
     hash[o.id] = o; 
 
    }); 
 
    source.forEach(function (o, i, a) { 
 
     if (hash[o.id]) { 
 
      o.children && update(hash[o.id].children = hash[o.id].children || [], o.children) 
 
     } else { 
 
      target.push(o); 
 
     } 
 
    }); 
 
} 
 
var array1 = [{ value: 'Node 1', id: 1, children: [{ value: 'Node 2', id: 2, children: [{ value: 'Node 3', id: 3 }, { value: 'Node 4', id: 4 }] }] }], 
 
    array2 = [{ value: 'Node 1', id: 1, children: [{ value: 'Node 5', id: 5 }] }]; 
 

 
update(array1, array2); 
 

 
console.log(array1);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題