pieza de estado: ['youth', 'college'];
Objeto de evento:
{ name: theEvent, ageDivisions: { youth: true, middleSchool: true, highSchool: true, college: true open: false }, }
Quiero filtrar a través de múltiples objetos de eventos y solo regresar cuando el evento al menos contiene todas las cadenas coincidentes en la matriz de estado. esta matriz se crea en función de lo que el usuario selecciona del formulario (imagen a continuación)
Hasta ahora, mi enfoque ha sido convertir el parámetro de divisiones de edad de los eventos en una matriz de matrices que contienen la clave y el valor. Posiciones 1 y 2 respectivamente
if (filterParamaters.ageDivisions !== undefined && filterParamaters.ageDivisions.length != false) { let parsedEvents = events.data.map(({ attributes: event }) => { return { ...event, ...event.attributes, ageDivisions: JSON.parse(event.ageDivisions), eventStyles: JSON.parse(event.eventStyles), } }) console.log({ parsedEvents }); filteredEventss = parsedEvents.filter((event) => { // make event .attributes.ageDivisions object an array of key value pairs console.log({ eventThatWeAreFiltering: event }); if ((event.ageDivisions !== undefined && event.ageDivisions !== null)) { let eventAgeDivisions = Object.entries(event.ageDivisions); console.log({ theAgifiedObject: eventAgeDivisions }); // This maps through each object in the Object key value pair Array // It might be easier to use map and just chang the array to only have the matching values let onlyTrueEventAgedivisions = eventAgeDivisions.map((ageDivision, index) => { console.log({ theAgeDivision: ageDivision[2] }); if (ageDivision[2] === true) { return [ageDivision[0], ageDivision[2]]; } else { return false; } }) console.log({ theTrueEventAgedivisions: onlyTrueEventAgedivisions }); } }) console.log({ theFinishedFilteredevents: filteredEventss }); }
Lo que hice fue verificar si ageDivisions
existía en cada objeto y, si es así, ejecutar esta lista filterParameters.ageDivisions
, verificando si todas las propiedades que desea que sean verdaderas están configuradas como verdaderas.
const result = parsedEvents.filter((e) => e.ageDivisions && filterParameters.ageDivisions.every(prop => e.ageDivisions[prop])) console.log(result);