从伪层次结构创建嵌套对象

时间:2011-11-08 21:14:01

标签: javascript json

我的数据如下:

[{
    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将项目有效地转换为树。只有一个顶级元素。

我真的不知道该怎么做。我想我想要一些基于堆栈的解决方案,但我还没有设法解决它。

1 个答案:

答案 0 :(得分: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);