У меня есть несколько флажков для фильтрации объектов, и я не могу обработать условие, чтобы вернуть необходимый объект на основе одного условия для нескольких параметров, выбранных из флажка.
Я написал условие, используя оператор &&, и он ищет точное совпадение с указанным условием.
let json = [{
"id": 1,
"kba": false,
"email": true
},
{
"id": 2,
"kba": true,
"email": true
},{
"id": 3,
"kba": true,
"email": false
}]
function integrationFilter(selectedValue){
return truthy = json.filter(j => {
return j.kba === selectedValue.kba && j.email === selectedValue.email
})
}
let selectedValue1 = {"email": false}
let t2 = {"kba": true}
let t3 = {"email": true, "kba": false}
let op = integrationFilter(t2)
console.info(op)
С моей приведенной выше логикой я получаю пустой массив. Но я хотел бы получить результат, так как я передаю kba как истину. Эти ключи в объекте представляют собой несколько вариантов, которые у меня есть, и они могут расти.
[ { id: 2, kba: true, email: true },
{ id: 3, kba: true, email: false } ]
Я хочу получить все объекты, у которых есть оба {"email": true, "kba": true}
Хорошо, пожалуйста, посмотрите мой ответ. Это помогает?
Вы проверяете с помощью &&
, который ожидает, что оба утверждения будут true
. Я изменил вашу функцию фильтра, чтобы обработать ваш сценарий.
let json = [{
"id": 1,
"kba": false,
"email": true
},
{
"id": 2,
"kba": true,
"email": true
}, {
"id": 3,
"kba": true,
"email": false
}
]
function integrationFilter(selectedValue) {
return json.filter(j => {
return Object.entries(selectedValue).every(([key, value]) => {
return j[key] === value;
});
});
}
let t1 = {
"email": false
}
let t2 = {
"kba": true
}
let t3 = {
"email": true,
"kba": false
}
console.info('t1:', integrationFilter(t1));
console.info('t2:', integrationFilter(t2));
console.info('t3:', integrationFilter(t3));
Итак, насколько я понял, вы хотите сопоставить все ключи, указанные в selectedValue
. Вы можете добиться этого, например, так:
let json = [{
"id": 1,
"kba": false,
"email": true
},
{
"id": 2,
"kba": true,
"email": true
},{
"id": 3,
"kba": true,
"email": false
}]
function integrationFilter(selectedValue){
const keysToValidate = Object.keys(selectedValue);
return json.filter(j => {
for (let key in selectedValue)
if (j[key] !== selectedValue[key])
return false;
return true;
})
}
let selectedValue1 = {"email": false}
let t2 = {"kba": true}
let t3 = {"email": true, "kba": false}
let op = integrationFilter(t2)
console.info(op)
Который выбирает только значения из массива json
, у которых все ключи/значения совпадают с selectedValue
.
Привет, Себастьян. Спасибо за приведенное выше решение, опубликованное ajai Works. В вашем решении он возвращает объект с идентификаторами 2 и 3, тогда как он должен просто возвращать идентификатор 1.
Я считаю, что результаты такие же. Я разместил только один пример, который точно такой же, как и вышеприведенное решение.
Итак, в случае, если
selectedValue
равно{"email": true, "kba": true}
, вы хотите, чтобы все объекты, у которых есть обе email true и kba true или либо из них, были истинными?