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