Задать вопрос
@ivanovSP

Как построить дерево на основе parent?

Подскажите плиз, как построить иерархию(10 уровень вложенности максимален, заранее не известно сколько будет уровней) на основе этого объекта, есть ли какое-нибудь готовое решение?

var data = [{
    id: 5,
    parent_id: 0, // 0 - root
    name: "*" //name Для удобство, на деле там просто названия категорий.
  }, {
    id: 2,
    parent_id: 3,
    name: "*.*.*.*"
  }, {
    id: 4,
    parent_id: 5,
    name: "*.*"
  }, {
    id: 3,
    parent_id: 4,
    name: "*.*.*"
  }, {
    id: 113,
    parent_id: 0,
    name: "#"
  },


];


В результате должен получится многоуровневый объект
Задача ходовая, может в Underscore есть что-то подобное?
Подскажите плиз.
  • Вопрос задан
  • 1555 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const createTree = (data, parentId = null) =>
  data.reduce((acc, n) => (
    n.parent_id === parentId && acc.push({
      ...n,
      children: createTree(data, n.id),
    }),
    acc
  ), []);

const tree = createTree(data, 0);

или

function createTree(
  data,
  {
    key = 'id',
    parentKey = 'parentId',
    childrenKey = 'children',
  } = {}
) {
  const tree = {};
  data.forEach(n => tree[n[key]] = Object.assign({}, n));

  return Object.values(tree).reduce((acc, n) => {
    const p = tree[n[parentKey]];
    (p ? p[childrenKey] = p[childrenKey] || {} : acc)[n[key]] = n;
    return acc;
  }, {});
}

const tree = createTree(data, { parentKey: 'parent_id' });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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