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

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

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

  return tree;
}


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

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

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