Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

151
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda