Как можно сформировать дерево категорий в javascript?

Каким образом можно создать древовидный вывод в html подкатегорий?
формат, который мне приходит, обычный для таких ситуаций:
{id: 1, name: "Категория 1", parent_id: 0}
{id: 2, name: "Категория 2", parent_id: 0}
{id: 3, name: "Категория 3", parent_id: 1}

Я так понимаю лучше всего это сделать через рекурсии?
  • Вопрос задан
  • 731 просмотр
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Сделаем метод, который превратит плоский массив во вложенный:

function createTreeData(arr, idProp, parentProp) {
  const tree = Object.fromEntries(arr.map(n => [ n[idProp], { ...n, children: [] } ]));
  return Object.values(tree).filter(n => !tree[n[parentProp]]?.children.push(n));
}

Сделаем метод, который создаст разметку дерева из вложенного массива:

const createTreeHTML = data =>
  Array.isArray(data) && data.length
    ? `<ul>${data.map(n => `
         <li>
           ${n.name}
           ${createTreeHTML(n.children)}
         </li>`).join('')}
       </ul>`
    : '';

Всё, можно строить дерево:

const treeData = createTreeData(data, 'id', 'parent_id');
const treeHTML = createTreeHTML(treeData);
treeContainerElement.innerHTML = treeHTML;

https://jsfiddle.net/1yxz5a2k/
Ответ написан
Комментировать
evgen3
@evgen3
Фронтэнды
можно без рекурсии, в принципе: https://jsfiddle.net/y1ehn4v6/
просто через поиск по DOM
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект