с учетом следующей структуры:
let filteredTasks = [
{status: 'done', other: true},
{status: 'nope', other: false},
{status: 'done', other: true},
{status: 'done', other: true},
{status: 'done', other: false},
{status: 'done', other: false},
{status: 'started', other: false}
]
и:
let availableFilters = [{status: 'done'}, {other: false}]
как мне отфильтровать этот массив, чтобы получить следующие результаты:
filteredTasks =
[{status: 'done', other: false}, {status: 'done', other: false}]
myмысли и попытки:
let filteredTasks = [
{status: 'done', other: true},
{status: 'nope', other: false},
{status: 'done', other: true},
{status: 'done', other: true},
{status: 'done', other: false},
{status: 'done', other: false},
{status: 'started', other: false}
]
let availableFilters = [{status: 'done'}, {other: false}]
let filteredTasksList = availableFilters.map(item => {
return runFilter(item)
})
function runFilter(currentFilter) {
return filteredTasks.filter(item => {
for (var key in currentFilter) {
if (item[key] === undefined || item[key] !== currentFilter[key])
return false
}
return true;
})
}
... но, очевидно, это имеет преимущественную силу при каждом проходе.
Как всегда, любая обратная связь и помощь очень приветствуются, поэтому спасибо заранее.
РЕДАКТИРОВАТЬ: принял первоначальный комментарий в качестве решения, поскольку оно соответствует моим потребностям.Я использовал это, чтобы сделать шаг вперед:
let filterTaskList = (list, filters) => {
let entries = Object.entries(Object.assign(...filters))
return list.filter(task => {
return entries.every(([key, val]) => {
return task[key] === val
})
})
}