This is my issue, I try to get result of items base on my filter array.
const papaFilter=[
{type:'event', value: ['In Person']},
{type:'city', value: ['Boston', 'Miami', 'New York']}
]
const items = [
{city: 'Boston', type: 'In Person'},
{city: 'New Jersey', type: 'In Person'},
{city:'Boston', type:'Virtual'}
]
const filteredResults = items.filter(el => papaFilter.some(filterEl => el[filterEl.type] === filterEl.value));
I want the first object of my items because papafilter contain Boston and In Person.
I know in my condition filterEl.value is an array of multiple value so this condition doesn't work. Any Ideas?
You could filter the array checking all filter item.
This approach takes an object for replacing keys.
const
replacements = { event: 'type' },
filter = [{ type: 'event', value: ['In Person'] }, { type: 'city', value: ['Boston', 'Miami', 'New York'] }],
items = [{ city: 'Boston', type: 'In Person' }, { city: 'New Jersey', type: 'In Person' }, { city: 'Boston', type: 'Virtual' }],
result = items.filter(o =>
filter.every(({ type, value }) => value.includes(o[(replacements[type] || type)]))
);
console.log(result);
I think you are looking for Array.includes. So, filterEl.value.includes(el[filterEl.type]) in the last block should give you the desired result.
You can find more about it here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes