Javascript 条件数组的多个过滤器
几个小时以来,我一直在努力寻找解决我的过滤问题的方法。我正在react上建立一个市场,但在其中一个页面上,我需要用户能够应用多个过滤。 例如,我有我的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'},
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);
}
})
})