Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

150
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!