JS Сложная фильтрация массива
Не могу придумать как отфильтровать такой массив, используя JS:
var users = [
{
Severity: 'Warning',
Status: 'Unresolved',
},
{
Severity: 'Warning',
Status: 'Resolved',
},
{
Severity: 'Critical',
Status: 'Unresolved',
},
{
Severity: 'Critical',
Status: 'Resolved',
},
];
И если фильтр такой:
var filter = [
{
key: 'Severity',
values: ['Warning', 'Critical']
},
{
key: 'Status',
values: ['Resolved']
},
];
Я хочу получить результат:
var users = [
{
Severity: 'Critical',
Status: 'Resolved',
},
{
Severity: 'Warning',
Status: 'Resolved',
},
];
Спасибо!
Ответы (1 шт):
Автор решения: Sergey Glazirin
→ Ссылка
Проходим циклом по элементам фильтра, и фильтруем каждый раз по нужному полю с нужным значением, вроде не сложно.
function filterData(data, filter) {
let result = data;
filter.forEach(item => {
result = result.filter(element =>
item.values.includes(element[item.key])
)
})
return result;
}
var users = [{
Severity: 'Warning',
Status: 'Unresolved',
},
{
Severity: 'Warning',
Status: 'Resolved',
},
{
Severity: 'Critical',
Status: 'Unresolved',
},
{
Severity: 'Critical',
Status: 'Resolved',
},
];
var filterKey = [{
key: 'Severity',
values: ['Warning', 'Critical']
},
{
key: 'Status',
values: ['Resolved']
},
];
console.log(filterData(users, filterKey))