Вуэйс поиск по массиву объекта - PullRequest
0 голосов
/ 02 октября 2019

У меня есть ответ API Laravel, такой как:

{
id:1, 
name: "Text",
category: {
            id: 1,
            name: "Text 2",
          },
tags:[
       {
         id: 1,
         name: "Tag1",
       },
       {
         id: 2,
         name: "Tag2",
       },
     ],
},

Для моего интерфейса (с помощью vuejs) я создал простую вычисляемую функцию для фильтрации категории, основанную на выбранных пользователем флажках.

checkedCategory: []
.
.
let posts = this.posts;
if (typeof this.checkedCategory !== 'undefined' && this.checkedCategory.length > 0) {
          posts = posts.filter((post) => {
                     return this.checkedCategory.indexOf(post.category.name) > -1;})}

Все работает. Расходы фильтруются по категориям, выбранным пользователем.

Но сообщения также могут иметь несколько тегов. Массив объектов, поэтому я переформулировал блок с .include (вместо .filter), новозвращает пустой результат.

checkedTags: []
.
.
let posts = this.posts;
if (typeof this.checkedTags !== 'undefined' && this.checkedTags.length > 0) {
          posts = posts.includes((post) => {
                     return this.checkedTag.indexOf(post['tags']) > -1;})}

1 Ответ

0 голосов
/ 03 октября 2019

Я думаю, что это должно сработать:

let posts = this.posts;
if (typeof this.checkedTags !== 'undefined' && this.checkedTags.length > 0) {
  posts = posts.filter(post => {
    return post.tags.some(tag => checkedTags.includes(tag.name))
  })
}

По сути, он просто отфильтрует все сообщения, где хотя бы один тег находится в массиве checkedTags. В зависимости от ваших потребностей вы также можете проверить, есть ли все tags сообщения с post.tags.every()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...