ajky
@ajky
Full-stack developer

Как на JS оптимизировано преобразовать плоскую структуру в древовидную?

С сервера передаётся массив с объектами, выглядит примерно так:
[
  {
    id: 1,
    path: [2,3]
  },
  {
    id: 2,
    path: []
  },
  {
    id: 3,
    path: [2]
  }
]

path - путь по id, начиная с корня дерева

Нужно привести к виду:
[
  {
    id: 2,
    children: [{
      id: 3,
      children: [
        {id: 1},
        {id: 4}
      ]
    }]
  }
]

В голову ничего не приходит, кроме как пробежаться по массиву, узнать максимальное количество уровней и запустить цикл в котором будет строиться новый массив начиная от корневых документов, проходя каждый уровень... но мне кажется, что есть способы куда лучше :/
P.S. если можно - кодом, пожалуйста. Спасибо.
  • Вопрос задан
  • 317 просмотров
Решения вопроса 1
codepen.io/anon/pen/mOxBeQ?editors=1012

Сделано на основе мутабельности объектов в JS, у каждого итема читаю только последний элемент из path

в IE не будет работать потому что Object.assign, если критично, то можно заменить ее на что-то схожее

PS: children не склоняется, это и так множественное число)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы