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

Creating nested objects from a pseudo-hierarchy

本文关键字:嵌套 对象 创建 层次结构      更新时间:2023-09-26

我有这样的数据:

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

我真不知道该怎么做。我想我需要某种基于堆栈的解决方案,但是我还没有想出来。

嗯,这比预期的要容易:

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);