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

260
Visualizações
Eliminar objetos de matriz contenidos en otra matriz por valor

Tengo que eliminar todos los objetos de la matriz que contienen la misma identificación presente en otra matriz.

Este código funciona

 myArray = [{id: 1, value: 'a'}, {id: 2, value: 'b'}, {id: 3, value: 'c'}]; itemsToRemove = [{id: 2, value: 'x'}, {id: 3, value: 'y'}]; for (const item of itemsToRemove) { myArray.splice(myArray.findIndex(a => a.id === item.id), 1); }

pero estoy buscando una forma más elegante de hacerlo. yo tambien he probado

 const newArray = myArray.filter(a => itemsToRemove.findIndex(i => i.id === a.id));

pero no funciona. (crea una nueva matriz, pero al menos un elemento con la misma identificación permanece en la nueva matriz).

¿Hay una manera limpia y concisa de hacerlo?

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

0

Estás cerca, pero como dijo James en los comentarios, findIndex es la elección incorrecta porque devuelve -1 cuando no se encuentra el elemento. filter requiere que su predicado devuelva un boolean y -1 no es un boolean , por lo que está forzado a uno. Desafortunadamente, -1 es verdadero , lo que no coincide con su intención en el predicado.

Puede agregar una comparación para verificar que findIndex devolvió un valor menor que cero, o puede usar find o some :

 const myArray = [{id: 1, value: 'a'}, {id: 2, value: 'b'}, {id: 3, value: 'c'}]; const itemsToRemove = [{id: 2, value: 'x'}, {id: 3, value: 'y'}]; const newArray1 = myArray.filter(a => itemsToRemove.findIndex(i => i.id === a.id) < 0); console.log(newArray1); const newArray2 = myArray.filter(a => !itemsToRemove.find(i => i.id === a.id)); console.log(newArray2); const newArray3 = myArray.filter(a => !itemsToRemove.some(i => i.id === a.id)); console.log(newArray3);


Vale la pena señalar que find no es compatible con IE , ni findIndex . some es compatible con todos los navegadores , por lo que es el más compatible.

some es también el más eficaz:

Captura de pantalla de JSBench.me que muestra los resultados en la siguiente tabla

Prueba Resultado Operaciones/segundo
buscarÍndice 10,63% más lento 26632285
encontrar 12,39% más lento 26107649
alguno lo más rápido 29799972
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