Задать вопрос
@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 есть что-то подобное?
Подскажите плиз.
  • Вопрос задан
  • 1529 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function createTree(arr, idKey, parentKey) {
  const tree = {};
  arr.forEach(n => tree[n[idKey]] = Object.assign({}, n));

  return Object.values(tree).reduce((acc, n) => {
    const parent = tree[n[parentKey]];
    (parent ? parent.children = parent.children || {} : acc)[n[idKey]] = n;
    return acc;
  }, {});
}


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

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

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