Este es mi problema, trato de obtener el resultado de los elementos basados en mi matriz de filtros.
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));Quiero el primer objeto de mis artículos porque papafilter contiene Boston y En persona.
Sé que en mi condición filterEl.value es una matriz de valores múltiples, por lo que esta condición no funciona. ¿Algunas ideas?
Puede filtrar la matriz comprobando todos los elementos de filter .
Este enfoque toma un objeto para reemplazar las claves.
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);Creo que estás buscando Array.includes . Entonces, filterEl.value.includes(el[filterEl.type]) en el último bloque debería darte el resultado deseado.
Puede encontrar más información aquí: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes