【发布时间】:2019-05-25 06:32:44
【问题描述】:
我正在尝试基于多个过滤器数组过滤一组项目。每个项目都有一个过滤器选择,我只需要显示与所有选定过滤器匹配的那些。
const selectedFilters = {
color: ["Red", "Blue"],
type: ["Shirt"],
size: ["M"]
};
const items = [
{
name: "Item 1",
filters: {
color: ["Red", "Blue", "Black"],
type: ["Shirt"],
size: ["M"]
}
},
{
name: "Item 2",
filters: {
color: ["Red"],
type: ["Pants"],
size: ["M"]
}
}
];
这就是我一直试图解决的方法。筛选所有项目 - 对于每个不为空的筛选类别,检查所有筛选词并检查项目是否与所有项目匹配。
const filterItems = (items, selectedFilters) => {
const filterKeys = Object.keys(selectedFilters);
return items.filter(item => {
return filterKeys.every(key => {
// Ignore empty filters
if (!selectedFilters[key].length) {
return true;
}
return selectedFilters[key].every(filterWord => {
item.filters[key].includes(filterWord);
});
});
});
};
filterItems(items, selectedFilters);
返回一个空数组,应该返回一个包含“Item 1”对象的数组。
【问题讨论】:
-
我为您的问题添加了答案。
-
实际上,您的解决方案是完全正确的,您只是在
every回调中缺少return:return item.filters[key].includes(filterWord)
标签: javascript arrays filtering