Задать вопрос
Zhanna_K
@Zhanna_K
in progress

Как преобразовать данный список в дерево?

Испытываю сложность с тем, как сделать из данного списка иерархическую структуру...здесь явно не указан главный узел, от которого строить дерево. Как можно его определить?
const data = [
	{ id: 'main', parts: ['main-left', 'main-right'] },
	{ id: 'main-101', parts: undefined },
	{ id: 'main-102', parts: undefined },
	{ id: 'main-head', parts: undefined },
	{ id: 'main-left', parts: ['main-101', 'main-102'] },
	{ id: 'main-right', parts: ['main-head'] },
];

Я получаю данные в таком формате из базы данных, и нужно вывести их в виде дерева
  • Вопрос задан
  • 250 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function createTree({
  data,
  key = 'id',
  childrenKeysKey = 'children',
  childrenKey = 'children',
}) {
  const tree = Object.fromEntries(data.map(({ [childrenKeysKey]: _, ...n }) => [ n[key], n ]));
  data.forEach(n => tree[n[key]][childrenKey] = n[childrenKeysKey]?.map?.(m => tree[m]) ?? []);
  const nonRootIds = new Set(data.flatMap(n => n[childrenKeysKey] ?? []));
  return Object.values(tree).filter(n => !nonRootIds.has(n[key]));
}

const tree = createTree({
  data,
  childrenKeysKey: 'parts',
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Который ни разу не фигурирует в parts - тот и есть корневой
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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