Javascript 条件数组的多个过滤器

Javascript 条件数组的多个过滤器,javascript,arrays,object,filter,lodash,Javascript,Arrays,Object,Filter,Lodash,几个小时以来,我一直在努力寻找解决我的过滤问题的方法。我正在react上建立一个市场,但在其中一个页面上,我需要用户能够应用多个过滤。 例如,我有我的 productsList = [{brand: 'Zara', category: 'Jeans', color: 'blue'}, {brand: 'BlaBla',color: 'blue', category: 'Leggins'}, {brand: 'Louis', category: 'Leggins', color: 'red'},

几个小时以来,我一直在努力寻找解决我的过滤问题的方法。我正在react上建立一个市场,但在其中一个页面上,我需要用户能够应用多个过滤。 例如,我有我的

productsList = [{brand: 'Zara', category: 'Jeans', color: 'blue'}, {brand: 'BlaBla',color: 'blue', category: 'Leggins'}, {brand: 'Louis', category: 'Leggins', color: 'red'}, {brand: 'Louis', category: 'Jeans', color: 'pink'}]
在我的状态下,我可以通过过滤器对象访问许多过滤器

filters: {
  designers: ['Zara', 'Louis'],
  categories: [],
  colors: ['pink']
}
例如,如果我只想保留Zara品牌和蓝色的牛仔裤,你会建议我如何继续过滤掉它。我很困惑,因为我的过滤器是数组的对象。我试着使用lodash和一些我在网上找到的其他解决方案,但没有成功。 感谢您的帮助

更改过滤器的关键点以适合对象,或创建另一个将在两者之间转换的对象

将过滤器转换为条目[key,value],过滤掉空条目数组为空。使用Array.filter迭代productList,对于所有现有条目,检查是否包含当前对象的属性

常量applyFilters=过滤器,arr=>{ const entries=Object.entriesfilters .filter[,v]=>v.length 返回arr.filtero=> 条目 .每[k,v]=>v.includeso[k] } const productsList=[{品牌:'Zara',类别:'Jeans',颜色:'blue'},{品牌:'BlaBla',颜色:'blue',类别:'Leggins'},{品牌:'Louis',类别:'Leggins',颜色:'red'},{品牌:'Louis',类别:'Jeans颜色:'pink'}] 常数过滤器={ 品牌:['Zara','Louis'], 类别:[], 颜色:[“粉色”] } 常量结果=applyFiltersfilters,productsList
console.LogResulty您应该使用数组函数筛选器并在回调函数中创建逻辑,以便仅返回所需的值:您的筛选器需要数据来定义它们是和还是条件,否则必须将它们编码到筛选函数中。出于好奇,您是否在使用某种库或教程来实现此目的?我见过很多人做同样的事情,问题也很相似。甚至代码和变量名看起来都一样。
productsList.filter(product => {
    return Object.keys(filters).every(key => {
        if (!filters[key].length) return true;
        switch (key) {
            case 'designers':
                return filters[key].includes(product.brand);
            case 'categories':
                return filters[key].includes(product.category);
            case 'colors':
                return filters[key].includes(product.color);
        }
    })
})