【问题标题】:Put multiple filters on data from database对数据库中的数据设置多个过滤器
【发布时间】:2020-01-10 02:51:02
【问题描述】:

我正在从数据库中获取数据。

数据的结构如下:

serie
   --- title (string)
   --- category (array)

我使用计算属性制作了搜索过滤器。它看起来像这样:

filteredSeries () {
  return this.series.filter(serie => {
    return serie.title.toLowerCase().match(this.search.toLowerCase())
  })
}

我正在循环播放这样的系列:

<v-flex xs12 sm4 md3 lg2 v-for="serie in filteredSeries" :key="serie.title" pa-3>

.....

</v-flex>

搜索词是从这里得到的:

<v-text-field label="Search" height="35" v-model="search" prepend-inner-icon="search"></v-text-field>

一切都很好,但现在我们正在解决我的问题。我不仅要按标题过滤系列,还要按类别过滤。

我从数组中的数据方法中获取所有类别,如下所示:

data () {
  return {
    series: [],
    search: '',
    categories: [
      'Crime', 'Drama', 'Mistery', 'Comedy', 'Horror', 'Sci-Fi'
    ],
    filterCategory: []
  }
},

过滤器选择填充这样的数据:

<v-select  prepend-inner-icon="category" height="35" v-model="filterCategory" :items="categories" chips label="Category" multiple></v-select>

此选择正在返回 filterCategory 数组。现在我想要的是在 filterCategory 中选择特定类别的系列。我不知道该怎么做。我认为如果按类别过滤可以包含在按搜索词过滤完成的计算属性中,那将是完美的。

欢迎任何帮助如何做到这一点。

【问题讨论】:

    标签: javascript arrays vue.js filtering vuetify.js


    【解决方案1】:

    您的过滤方法可以修改为也通过filteredCategories进行过滤。

    我们可以使用 JavaScript 的 Array.every()Array.includes() 方法来做到这一点。

    另外,我会使用String.includes() 而不是String.match(),因为match() 主要用于搜索正则表达式。

    filteredSeries () {
    
      // Filtering by selected categories.
      const filteredSeries = this.series.filter(serie => {
        return this.filteredCategories.every(category => {
          return serie.categories.includes(category);
        });
      });
    
      // Further filtering by search word.
      return filteredSeries.filter(serie => {
          return serie.title.toLowerCase().includes(this.search.toLowerCase()));
      });
    }
    

    【讨论】:

    • 也许我不够清楚。我不想检查类别是否包含搜索词。我想取回我从&lt;v-select&gt; 选择的类别的系列。
    • @PatrickJane - 好的,你也希望这发生在这个filteredSeries() 中,对吧?这样您就只搜索应用类别过滤器后返回的filteredSeries
    • 嗯,是的。我希望那会发生,因为我不知道该怎么做。
    • 它正在工作。问题是因为默认 filteredCategories 是空数组并且它没有显示任何系列。我设置了条件if (this.filteredCategories.length == 0) { return true } else { return this.filteredCategories.includes(category); } 它现在正在工作。我想我会有更多的问题。谢谢你。
    • 是的,它运行良好。我要祝贺你。你让我今天很开心。希望你为自己感到骄傲,你刚刚做了这么棒的工作。非常感谢。希望您能帮助我解决有关 stackoverflow 的任何其他问题:D。干杯伙伴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2018-01-25
    相关资源
    最近更新 更多