2011-11-08 132 views
0

我有一個看起來像這樣的數據:從僞層次創建嵌套對象

[{ 
    level: 0, 
    data: 'A', 
}, { 
    level: 1, 
    data: 'B', 
}, { 
    level: 1, 
    data: 'C', 
}, { 
    level: 2, 
    data: 'D', 
}, { 
    level: 3, 
    data: 'E', 
}, { 
    level: 1, 
    data: 'F', 
}] 

這可以看作:

A 
    B 
    C 
    D 
     E 
    F 

我想將它轉化到:

{ 
    data: 'A', 
    children: [{ 
     data: 'B', 
    }, { 
     data: 'C', 
     children: [{ 
      data: 'D', 
      children: [{ 
       data: 'E', 
      }] 
     }] 
    }, { 
     level: 1, 
     data: 'F', 
    }] 
} 

其中項目被有效地變成樹,其level。只有一個頂級元素。

我真的不知道該怎麼做。我想我想要某種基於堆棧的解決方案,但我還沒有設法解決。

+0

你真的不能。等級2是在什麼下面? F,C,B?沒有足夠的信息來構建一棵樹 – Joe

+0

@IAbstractDownvoteFactory:這完全是關於元素的順序。看到我在中間添加的可視化效果。 – Eric

回答

0

咦,那是更容易比預期:

var stack = []; 

for (var i = 0; i < items.length; i++) { 
    var item = items[i]; 
    var toAdd = { 
     data: item.data, 
     children: [] 
    }; 
    stack[item.level] = toAdd; 
    if(item.level > 0) 
     stack[item.level - 1].children.push(toAdd); 
} 

var tree = stack[0]; 
console.log(tree);