Я пишу функцию фильтра массива JSON на основе нескольких критериев.
Фильтр зависит от двух массивов: 1. Первый содержит значения, которые должны быть частью искомого JSON, и 2. Второй содержит значения.которые являются необязательными.
Я имею в виду возвращать только те записи массива, которые содержат ВСЕ значения из массива obligatory
и хотя бы один элемент из массива optional
.
Вот моя попытка:
const searchKeys = ['varWord', 'varTrans', 'varSpec'],
obligatory = ['trip', 'pret'],
optional = ['greet', 'lco', 'toto', 'bene'];
function filterByUpdate(obligatory, optional, file) {
return _.filter(file, item => {
return _.some(optional, opt => {
return _.every(obligatory, oblg => {
return _.some(item, value => {
return _.some(searchKeys, n => item[n].toLowerCase().includes(oblg.toLowerCase())) &&
searchKeys.some(n => item[n].toLowerCase().includes(opt.toLowerCase()))
})
});
});
});
}
Приведенный выше код должен сохранять только первую запись из следующего массива данных:
[{
"varSpec": "trip",
"varTrans": "pret",
"varWord": "greet",
"stringPol": "group",
"stringDva": "groupGend",
"stringGit": "/tax",
}, {
"varSpec": "trip",
"varTrans": "pret",
"varWord": "friend",
"stringPol": "N",
"stringDva": "N",
"stringGit": "N",
}, {
"varSpec": "group1",
"varTrans": "grp1",
"varWord": "ageGroup1",
"stringPol": "N",
"stringDva": "N",
"stringGit": "N",
}]