【发布时间】:2020-05-15 23:07:22
【问题描述】:
我正在尝试使用多个不同的过滤器过滤一组对象。这目前适用于完全匹配,但不适用于使用子字符串进行过滤。有没有办法简单地修改这个过滤函数来返回所有部分匹配的值?
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 -
另外,您可能需要
.some()而不是.every()
标签: javascript typescript filter angular8