我正在从数据库中获取数据。
数据的结构如下:
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中选定的特定类别的系列。我不知道该怎么做。我认为,如果可以在按搜索字词进行过滤的计算属性中包含按类别进行过滤,那将是完美的。
欢迎任何帮助。
答案 0 :(得分:0)
您的过滤器方法可以修改为也可以通过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()));
});
}