@YakovSpb

Как в vue фильтровать массив?

У меня есть два массива... Сначала выводится первый с тремя элементами, а затем в каждом этом элементе выводится фильтр массива. Если в родительском элементе id тега такой-то, то выводится массивы с определенным свойством.

computed: {
        tasksFilter: function() {
          return this.tasks.filter(function(t) {
            return t.category == 'work'
          })
        }
      }
        boards:[
        {id:'board-1', title:'В работе'},
        {id:'board-2', title:'На проверке'},
        {id:'board-3', title:'Выполнено'}
        ],
[
	{"id":"1","category":"work","title":"Пример текста карточки", "desc":"Описание"},
	{"id":"2","category":"work","title":"Пример длинного текста карточки, да такого чтобы он вообще не поместился","desc":"Lorem Ipsum ."},
	{"id":"3","category":"work","title":"Пример текста карточки2", "desc":"Еще одно описание"},
	{"id":"4","category":"test","title":"Пример текста карточки3", "desc":"Еще одно описание"},
	{"id":"5","category":"done","title":"Пример текста карточки4", "desc":"Еще одно описание"}
]
  • Вопрос задан
  • 802 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Здесь нужна не фильтрация, а группировка.

В элементы board добавьте свойство, значения которого будут повторять значения свойства category у элементов массива tasks. Типа имя категории, обозвать можно name.

computed: {
  tasksGroupedByCategory() {
    return this.tasks.reduce(
      (acc, n) => (acc[n.category].push(n), acc),
      Object.fromEntries(this.boards.map(n => [ n.name, [] ]))
    );
  },
},

<div v-for="b in boards">
  <h2>{{ b.title }}</h2>
  <div v-for="n in tasksGroupedByCategory[b.name]">
    {{ n.title }}
  </div>
</div>

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

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

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