@AndrewRusinas

Как создать массив с объектами из другого массива?

Во vue есть массив с объектами:
posts: [
    {
      title: 'Тестовый пост',
      content: 'lorem lorem',
      category: 'lifestyle'
    },
    {
      title: 'Тестовый пост',
      content: 'lorem lorem',
      category: 'lifestyle'
    },
    {
      title: 'Тестовый пост',
      content: 'lorem lorem',
      category: 'business'
    },
    {
      title: 'Тестовый пост',
      content: 'lorem lorem',
      category: 'travel'
    },
    {
      title: 'Тестовый пост',
      content: 'lorem lorem',
      category: 'travel'
    },
  ]
}

Нужно создать отдельный массив с постами каждой отдельной категории (travel, lifestyle, business). Как это лучше сделать?
  • Вопрос задан
  • 198 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
computed: {
  groupedPosts() {
    return this.posts.reduce((acc, n) => {
      (acc[n.category] = acc[n.category] || []).push(n);
      return acc;
    }, {});
  },
},

UPD. Чего на самом деле хотел автор вопроса, вынесено из комментариев:

При нажатии на название категории хочу выводить посты и соответствующего массива.

Добавляем ещё одно вычисляемое свойство - массив категорий:

categories() {
  return Object.keys(this.groupedPosts);
},

И обычное свойство - выбранная категория:

data: () => ({
  activeCategory: null,
  ...

На основе массива категорий создаём кнопки, по нажатию на которые будет производиться выбор категории:

<button
  v-for="n in categories"
  v-text="n"
  :class="{ active: n === activeCategory }"
  @click="activeCategory = n"
></button>

Если категория выбрана - показываем соответствующие посты:

<div v-if="activeCategory">
  <div v-for="n in groupedPosts[activeCategory]" class="post">
    ...

https://jsfiddle.net/yxf50qg2/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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