Создание вложенных объектов из псевдоиерархии

#javascript #json

#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. На самом деле вы не можете. Уровень 2 подпадает под что? F, C, B ? Просто недостаточно информации для построения дерева

2. @IAbstractDownvoteFactory: Все дело в порядке расположения элементов. Смотрите визуализацию, которую я добавил в середине.

Ответ №1:

Ха, это было проще, чем ожидалось:

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