squadbrodyaga
@squadbrodyaga
帆は風を変えた

Как сделать рекурсию для списка комментариев?

Есть вот такой набор комментариев:
{
  id: 1,
  value: "Привет, я первый комментарий"
  parrent_id: null
},
{
  id: 2,
  value: "Привет, я ответ на первый комментарий"
  parrent_id: 1
},
{
  id: 3,
  value: "А я ответ на ответ"
  parrent_id: 2
},
{
  id: 4,
  value: "Я второй комментарий"
  parrent_id: null
}


Как древовидно вывести список этих комментариев, но чтобы глубина дерева была не больше трёх элементов?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Функция, превращающая плоский массив в дерево:

function createTree({
  arr,
  idKey = 'id',
  parentKey = 'parentId',
  childrenKey = 'children',
}) {
  const tree = Object.fromEntries(arr.map(n => [ n[idKey], { ...n, [childrenKey]: [] } ]));
  return Object.values(tree).filter(n => !tree[n[parentKey]]?.[childrenKey].push(n));
}

Рекурсивный компонент v-tree, выводящий древовидные данные:

props: {
  items: {
    type: Array,
    default: () => [],
  },
  maxdepth: {
    type: Number,
    default: Infinity,
  },
},

<ul v-if="Array.isArray(items) && items.length && maxdepth">
  <li v-for="n in items" :key="n.id">
    {{ n.value }}
    <v-tree :items="n.children" :maxdepth="maxdepth - 1" />
  </li>
</ul>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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