@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 есть что-то подобное?
Подскажите плиз.
  • Вопрос задан
  • 1459 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function createTree(data, idField, parentField, rootParent) {
  const
    tree = {},
    obj = {};

  data.forEach(n => obj[n[idField]] = Object.assign({}, n));

  Object.values(obj).forEach(n => {
    if (n[parentField] === rootParent) {
      tree[n[idField]] = n;
    } else {
      const t = obj[n[parentField]];
      t.children = t.children || {};
      t.children[n[idField]] = n;
    }
  });

  return tree;
}


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

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

Войти через центр авторизации
Похожие вопросы