Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

152
Vistas
Filtros para encontrar la intersección de dos matrices en React Native

Me gustaría filtrar una matriz de objetos. La matriz es una lista de clases de deporte y los objetos son las clases.

Se parece a esto :

 const list = [{category: "yoga", level: "beginner", duration: "15 minutes"}]

Tengo que aplicar filtro para que el usuario pueda elegir entre categoría (yoga, pilates...) nivel (principiante, avanzado...).

Necesito encontrar la intersección del filtro, lo que significa que si se seleccionan "yoga" y "principiante", me gustaría devolver solo clases de yoga para principiantes .

El usuario puede convertir en verdadero/falso las variables beginnnerFilter, etc. y las variables cardio/yoga, etc. Entonces, si el filtro de yoga es verdadero, yogaFilter = "yoga". Si es falso, yogaFilter = ""

Ejemplo:

 function filterIntersect() { let filteredListCategory = []; let filteredListLevel = []; for(let i = 0; i < list.length; i++) { if (list[i].category.toLowerCase() === cardio) { filteredListCategory.push(list[i]) } else if (list[i].category.toLowerCase() === yoga) { filteredListCategory.push(list[i]) } else if (list[i].category.toLowerCase() === boxing) { filteredListCategory.push(list[i]) } else if (list[i].category.toLowerCase() === dance) { filteredListCategory.push(list[i]) } else if (list[i].category.toLowerCase() === pilates) { filteredListCategory.push(list[i]) } else if (list[i].category.toLowerCase() === stretching) { filteredListCategory.push(list[i]) } } if (allFilterCategory === true) { filteredListCategory = [...list]; } for(let k = 0; k < list.length; k++) { if (list[k].level.toLowerCase() === beginnerFilter) { filteredListLevel.push(list[k]) } else if (list[k].level.toLowerCase() === intermediateFilter) { filteredListLevel.push(list[k]) } else if (list[k].level.toLowerCase() === advancedFilter) { filteredListLevel.push(list[k]) } } if (allFilterLevel === true) { filteredListLevel = [...list]; } let finalList = filteredListCategory.filter(item=> filteredListLevel.includes(item)); return finalList.length === 0 ? list : finalList; }

Logro devolver una matriz filtrada pero no funciona como se esperaba. A veces, los filtros no se aplican y tengo la lista completa en lugar de la lista filtrada. No estoy seguro de que el ciclo for sea apropiado aquí. También intenté usar el nuevo Set pero tampoco funcionaba. Muchas gracias.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar el método .filter y .some de matrices en lugar de declaraciones if y bucles for . P.ej

 const categoryChoices = [ { category: "yoga", checked: false }, { category: "meditation", checked: true }, { category: "pilates", checked: false }, { category: "cardio", checked: true }, ]; const levelsChoices = [ { level: "beginner", checked: true }, { level: "intermediate", checked: true }, { level: "advanced", checked: false }, ]; const data = [ { category: "yoga", level: "beginner", duration: '30 minutes' }, { category: "yoga", level: "intermediate", duration: '60 minutes' }, { category: "yoga", level: "advanced", duration: '90 minutes' }, { category: "meditation", level: "beginner", duration: '30 minutes' }, { category: "meditation", level: "intermediate", duration: '60 minutes' }, { category: "meditation", level: "advanced", duration: '90 minutes' }, { category: "pilates", level: "beginner", duration: '30 minutes' }, { category: "pilates", level: "intermediate", duration: '60 minutes' }, { category: "pilates", level: "advanced", duration: '90 minutes' }, { category: "cardio", level: "beginner", duration: '30 minutes' }, { category: "cardio", level: "intermediate", duration: '60 minutes' }, { category: "cardio", level: "advanced", duration: '90 minutes' }, ]; const checkedCategories = categoryChoices .filter((c) => c.checked) .map((c) => c.category); const checkedLevels = levelsChoices .filter((l) => l.checked) .map((l) => l.level); const filteredData = data.filter( ({ category, level }) => checkedCategories.some((c) => c === category) && checkedLevels.some((l) => l === level) ); console.log(filteredData);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda