Javascript 对数据库中的数据设置多个筛选器

Javascript 对数据库中的数据设置多个筛选器,javascript,arrays,vue.js,filtering,vuetify.js,Javascript,Arrays,Vue.js,Filtering,Vuetify.js,我正在从数据库中提取数据 数据的结构如下所示: 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
   --- 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>
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>
我使用计算属性创建了搜索过滤器。看起来是这样的:

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>
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>
我在这样的系列中循环:

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>
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>
Filter select中填充的数据如下所示:

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>
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中选择的特定类别。我不知道怎么做。我认为,如果按类别过滤可以包含在computed属性中(按搜索词过滤已完成),这将是完美的


欢迎您提供任何帮助。

您的筛选方法也可以修改为通过
filteredCategories
进行筛选

我们可以使用JavaScript的和方法来实现这一点

另外,我将使用而不是,因为在搜索正则表达式时通常使用
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()));
  });
}

您的筛选方法也可以修改为按
filteredCategories
进行筛选

我们可以使用JavaScript的和方法来实现这一点

另外,我将使用而不是,因为在搜索正则表达式时通常使用
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()));
  });
}

也许我不够清楚。我不想检查类别是否包含搜索词。我想取回我从
@PatrickJane中选择类别的系列-好的,你也希望在
filteredSeries()中发生这种情况,对吗?这样,您只需搜索应用类别筛选后返回的
filteredSeries
。嗯,是的。我希望这样的事情发生,因为我不知道怎么做,这是可行的。问题是因为默认情况下,
filteredCategories
是空数组,并且没有显示任何序列。我放置了条件
if(this.filteredCategories.length==0){return true}else{return this.filteredCategories.includes(category);}
它现在正在工作。我想我会有更多的问题。谢谢你。是的,它工作得很好。我想祝贺你。你让我很开心。希望你为自己感到骄傲,你刚刚做了这么好的工作。非常感谢。希望你能帮我解决stackoverflow上的任何其他问题:D.干杯,伙计。也许我还不够清楚。我不想检查类别是否包含搜索词。我想取回我从
@PatrickJane中选择类别的系列-好的,你也希望在
filteredSeries()中发生这种情况,对吗?这样,您只需搜索应用类别筛选后返回的
filteredSeries
。嗯,是的。我希望这样的事情发生,因为我不知道怎么做,这是可行的。问题是因为默认情况下,
filteredCategories
是空数组,并且没有显示任何序列。我放置了条件
if(this.filteredCategories.length==0){return true}else{return this.filteredCategories.includes(category);}
它现在正在工作。我想我会有更多的问题。谢谢你。是的,它工作得很好。我想祝贺你。你让我很开心。希望你为自己感到骄傲,你刚刚做了这么好的工作。非常感谢。希望你能帮我解决stackoverflow上的任何其他问题:D.干杯,伙计。