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

134
Visualizações
Filtrar una matriz de objetos con otra matriz

Tengo un problema de filtrado..

objArray es la matriz que debe filtrarse. selectedNames es una matriz que contiene los valores que quiero encontrar en objArray. Necesito buscar todos los objetos que tienen uno o más valores de selectedNames en su propiedad "names" (una matriz).

La salida que estoy tratando de obtener es:

 let result = [{names:["A","B","C","D"]}, {names:["A","B"]}, {names:["A","D"]} ]

Aquí hay una versión simplificada de mi código:

 let objArray = [{names:["A","B","C","D"]}, {names:["C","D"]}, {names:["C","D","E"]}, {names:["A","B"]}, {names:["A","D"]} ] let selectedNames = ["A","B"] result = this.objArray .filter(obj => { return this.selectedNames.includes(obj.names) }

Mi código parece funcionar bien si el atributo de nombres era un valor único y no una matriz. Pero no puedo entender cómo hacer que funcione en una matriz.

Cualquier ayuda es más que bienvenida

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Podrías hacer algo como esto. Filtrar la matriz en función de la propiedad de names que tiene un valor 'algún' incluido en la matriz de nombres seleccionados. ...

 objArray.filter(obj => obj.names.some(name => selectedNames.includes(name)));

[ Editar ] Como señaló @RadicalTurnip, esto no funciona si los nombres seleccionados son demasiado grandes. Te sugiero que uses un objeto. Ex

 ... const selectedNamesMap = selectedNames.reduce((p,c) => ({...p, [c]: true}), {}); objArray.filter(obj => obj.names.some(name => selelectedNamesMap[name]));

Exagerado, pero si las matrices son realmente grandes (millones de elementos), entonces es mejor usar métodos regulares de bucle for y no de matriz.

about 4 years ago · Juan Pablo Isaza Relatório

0

Este resultado no tiene un rendimiento ampliado, pero no sé si hay alguna forma de garantizar que tendrá un rendimiento a menos que tenga más información (como que los nombres ya están ordenados). Dicho esto, solo te perdiste una pieza más de lógica.

 result = this.objArray.filter(obj => { let toReturn = false; obj.names.forEach(name => { if (this.selectedNames.includes(name)) toReturn = true; }; }; return toReturn; };
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