2014-04-30 2 views
0

여기 Model Tree Structure with An Array Of Ancestors 자습서에 따라 범주 계층을 만들었습니다. 쿼리를 수행 할 때 다음 배열 덤프와 동일한 결과가 나타납니다. Javascript 트리 구조의 배열 배열

[ 
    {id:1,name:'A', ancestors:[]} 

     ,{id:2,name:'AA',parent:1, ancestors:[1]} 

      ,{id:4,name:'AAA',parent:2, ancestors:[1,2]} 
      ,{id:5,name:'AAB',parent:2, ancestors:[1,2]} 

     ,{id:3,name:'AB',parent:1, ancestors:[1]} 

      ,{id:6,name:'ABA',parent:3, ancestors:[1,3]} 
      ,{id:7,name:'ABB',parent:3, ancestors:[1,3]} 

    ,{id:8,name:'B', ancestors:[]} 
] 

나 동적 아래에 위의 배열을 변환 도와주세요 :

[ 
    {id:1, name:'A', ancestors: [], children : [ 
     //children of A 
     {id:2, name:'AA', parent:1, ancestors:[1], children:[ 
      //children of AA 
      {id:4, name:'AAA', parent:2, ancestors:[1,2], children:[]} 
      , {id:5, name:'AAB', parent:2, ancestors:[1,2], children:[]} 

     ]} 

     , {id:3, name:'AB', parent:1, ancestors:[1], children:[ 
      //children of AB 
      {id:6, name:'ABA', parent:3, ancestors:[1,3], children:[]} 
      , {id:7, name:'ABB', parent:3, ancestors:[1,3], children:[]} 

     ]} 

    ]} 

    , 

    {id:8, name:'B', ancestors:[]} 

] 나는 다음과 같은 결과 지금까지

[ 
    {id:1,name:'A', ancestors:[], children:[2,3]} 

     ,{id:2,name:'AA',parent:1, ancestors:[1], children:[4,5]} 

      ,{id:4,name:'AAA',parent:2, ancestors:[1,2], children:[]} 
      ,{id:5,name:'AAB',parent:2, ancestors:[1,2], chldren:[]} 

     ,{id:3,name:'AB',parent:1, ancestors:[1], children:[6,7]} 

      ,{id:6,name:'ABA',parent:3, ancestors:[1,3], children:[]} 
      ,{id:7,name:'ABB',parent:3, ancestors:[1,3], children:[]} 

    ,{id:8,name:'B', ancestors:[], children:[]} 
] 
를 얻을 수 있었다

이것을 작성함으로써 코드 : 여기

//var items = _GIVEN AT THE TOP_; 

var indexedItem = items.map(function(item){ 
    return item.id; 
}); 

items.forEach(function(item){ 
    if(!item.parent) {return;} 

    var parent = items[indexedItem.indexOf(item.parent)]; 
    if(!parent.children){parent.children = [];} 
    parent.children.push(item.id); 
}); 
+0

왜 내 대답을 선택하고 그것을 무시하지 않았다? –

답변

0

내 솔루션은 재귀를 사용하고 있습니다 :

function findChildren(array, itemId){ 
    var newItems = [] 
    array.forEach(function(el,index){ 
     if(el.parent == itemId) 
      { 
       var itemsClone = JSON.parse(JSON.stringify(items)); 
       itemsClone.pop(index); 
       el.children = findChildren(itemsClone, el.id); 
       newItems.push(el); 
      } 


    }); 
    return newItems; 
} 


var tree = findChildren(items);