我正在尝试使用多个不同的过滤器过滤对象数组。目前,这对于完全匹配的过滤可以工作,但是不能使用子字符串进行过滤。是否有一种简单地修改此过滤函数以返回具有部分匹配的所有值的方法?
nestedFilter(data, filters) {
let filterKeys = Object.keys(filters);
return data.filter(function (eachObj) {
return filterKeys.every(function (eachKey) {
if (!filters[eachKey].length) {
return true;
}
return filters[eachKey].includes(eachObj[eachKey]);
});
});
}
那么使用以下数据和筛选条件:
data = [
{
"NAME": "Johnathon",
"AGE": "19 ",
"GENDER": "M",
"SPORT": "Hockey",
"SCHOLARSHIP": "N"
},
{
"NAME": "Jessica",
"AGE": "20",
"GENDER": "F",
"SPORT": "Football",
"SCHOLARSHIP": "Y"
},
{
"NAME": "Matty",
"AGE": "20",
"GENDER": "NB",
"SPORT": "Tennis",
"SCHOLARSHIP": "Y"
},
{
"NAME": "Amy",
"AGE": "20",
"GENDER": "F",
"SPORT": "Football",
"SCHOLARSHIP": "N"
}
]
filters = [
{
"NAME": [],
"AGE": [],
"GENDER": [],
"SPORT": ["Foot", "Hockey"],
"SCHOLARSHIP": []
}
]
它应该返回Johnathon、Jessica和Amy对象。
(不同字段中的过滤器作为AND,同一字段中的过滤器作为OR)。
.includes()
改为.indexOf() != -1
。 - Washington Guedes.some()
而不是.every()
。 - Washington Guedes