vaech
@vaech

Как сортировать массив объектов по их паренту?

Есть массив с объектами, в котором содержатся элементы категорий и подкатегорий. Например, в сфере интересов.
Пользователь может выбрать категорию Visual Art, в ней - Film, а в нем - Comedy. То есть может быть глубокая вложенность взаимозависимых категорий и субкатегорий в них.

У каждой из выбраной категории есть параметр parent, который равен id своего парента. Только у верхнего элемента этот параметр равен null.
То есть выбор пользователя Visual Art => Film => Comedy вернет такой массив:

const interests = [
    {
      id: 64,
      parent: 158,
      title: 'Comedy',
    },
    {
      id: 97,
      parent: null,
      title: 'Visual Art',
    },
    {
      id: 158,
      parent: 97,
      title: 'Film',
    },
  ];


Элементы в массиве могут не идти один за другим в логическом порядке, поэтому нужно пройтись по массиву и сортировать его элементы так, чтобы в результае все шло в правильной последовательности и вернуло

[ { title: 'Visual Art' }, { title: 'Film' }, {  title: 'Comedy' } ]


Как корректно сортировать массив?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function sort(arr) {
  const obj = Object.fromEntries(arr.map(n => [ n.parent, n ]));
  const sorted = [];

  for (let item = obj['null']; item; item = obj[item.id]) {
    sorted.push(item);
  }

  return sorted;
}

или

function sort(arr, parent = null) {
  const item = arr.find(n => n.parent === parent);
  return item
    ? [ item, ...sort(arr, item.id) ]
    : [];
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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