@Turtle_Onni

Как построить дерево с большим количеством разветвлений?

Всем привет!

Использую дерево.
Как построить данного вида структуру?
Например у меня данные из базы в хаотичном порядке вида:
{ id, name, parentId }
(Нужно ли мне еще одно поле "Порядковый номер"?)
Для отображения дерева нужно привести их к виду:
[
  {
    "id": 1,
    "name": "node1",
    "children": [
      {
        "id": 11,
        "name": "node1.1",
        "children": [
          {
            "id": 111,
            "name": "node1.1.1",
            "children": [
{
        "id": 1111,
        "name": "node1.1.1.1",
        "children": []
      }
]
          }
        ]
      },
      {
        "id": 12,
        "name": "node1.2",
        "children": []
      }
    ]
  }
]


Как построить цикл для того чтобы выстроить аналогичную структуру?
Буду признательна ссылкам на ресурсы почитать.
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
рекурсия.

updated
Хотя можно и циклом просто

function buildTree(list) {
  const map = {};
  
  return list
   .sort((a, b) => Number(a.pid) - Number(b.pid))
   .reduce((tree, category) => {
     if (!map[category.id]) {
       map[category.id] = {
         id: category.id,
         children: []
       };
     }
     
     if (category.pid) {
       map[category.pid].children.push(map[category.id]);
     } else {
       tree.push(map[category.id]);
     }
     
     return tree;
   }, []);
}
Ответ написан
Ваш ответ на вопрос

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

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