Я пытаюсь отфильтровать массив объектов, используя несколько разных фильтров. В настоящее время это работает для точного соответствия, но не работает для фильтрации с использованием подстроки. Есть ли способ просто изменить эту функцию фильтра, чтобы она возвращала все значения, которые имеют частичное совпадение?
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).