我要过滤以下数组:
const array =
[{city: "Fullerton", techName: ["Sean"], routeName: ["Route 1"], routeDay: "Monday"},
{city: "Long Beach", techName: ["Sean", "Greg"], routeName: ["Route 1", "Route 3"], routeDay: "Monday"},
{city: "Huntington Beach", techName: ["Sean"], routeName: ["Route 1"], routeDay: "Monday"}];
具有以下数组:
const filters = [{type: "routeDay", filter: "Monday"}, {type: "techName", filter: "Greg"}];
我正在过滤具有多个过滤器的表,但我不知道如何用两个过滤器进行过滤。我可以按一个或另一个过滤,但一个和另一个过滤。
感谢您的帮助,谢谢!
答案 0 :(得分:4)
您可以过滤数组,对每个项目使用Array.every()
来迭代filters
的数组,并检查值是否可接受。
通过type
从当前对象获取相关值。如果是数组,请检查它是否包含filter
的值。如果不是,则比较值和filter
。
const array =
[{city: "Fullerton", techName: ["Sean"], routeName: ["Route 1"], routeDay: "Monday"},
{city: "Long Beach", techName: ["Sean", "Greg"], routeName: ["Route 1", "Route 3"], routeDay: "Monday"},
{city: "Huntington Beach", techName: ["Sean"], routeName: ["Route 1"], routeDay: "Monday"}];
const filters = [{type: "routeDay", filter: "Monday"}, {type: "techName", filter: "Greg"}];
const result = array.filter(o => filters.every(({ type, filter }) => {
const value = o[type];
return Array.isArray(value) ? value.includes(filter) : value === filter;
}));
console.log(result);