通过多个条件过滤数组

时间:2019-12-23 23:15:18

标签: javascript arrays reactjs 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"}];

我正在过滤具有多个过滤器的表,但我不知道如何用两个过滤器进行过滤。我可以按一个或另一个过滤,但一个和另一个过滤。

感谢您的帮助,谢谢!

1 个答案:

答案 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);

相关问题