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

118
Visualizações
¿Cómo filtrar una matriz de objetos por ID único y nombre único?

Tengo una matriz de objetos que se parece a lo siguiente:

 [ { id: 1234 name: Name1 }, { id: 5678 name: Name1 }, { id: 1234 name: Name1 }, { id: 5678 name: Name2 }, ]

Quiero filtrar y eliminar los objetos que tienen la misma identificación Y el mismo nombre, por lo que el resultado esperado sería el siguiente:

 [ { id: 1234 name: Name1 }, { id: 5678 name: Name1 }, { id: 5678 name: Name2 }, ]

Sin embargo, solo puedo filtrar la matriz de objetos por ID único y no estoy seguro de cómo atender la condición adicional del mismo nombre:

 data.filter((value, index, self) => { return ( self.findIndex((v) => v.id=== value.id) === index ); });
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Simplemente puede usar && para incluir criterios adicionales que deben cumplirse: en su ejemplo, desea que coincidan tanto la id como el name :

 const filteredData = data.filter((value, index, self) => self.findIndex(v => v.id === value.id && v.name === value.name) === index );

Si tiene varias claves que desea considerar y no desea escribir varias declaraciones && , simplemente puede almacenar las claves en una matriz y luego usar Array.prototype.every() para hacer cumplir la coincidencia:

 const keys = ['id', 'name']; const filteredData = data.filter((value, index, self) => self.findIndex(v => keys.every(k => v[k] === value[k])) === index );

Vea la prueba de concepto a continuación:

 const data = [{ id: 1234, name: 'Name1' }, { id: 5678, name: 'Name1' }, { id: 1234, name: 'Name1' }, { id: 5678, name: 'Name2' }, ]; const keys = ['id', 'name']; const filteredData = data.filter((value, index, self) => self.findIndex(v => keys.every(k => v[k] === value[k])) === index ); console.log(filteredData);

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede probar esta solución sencilla utilizando el método array.filter() junto con array.indexOf() y array.lastIndexOf()

Demostración de trabajo:

 const obj = [ { id: 1234, name: 'Name1' }, { id: 5678, name: 'Name1' }, { id: 1234, name: 'Name1' }, { id: 5678, name: 'Name2' } ]; const res = obj.filter((item, index, obj) => obj.indexOf(item) && obj.lastIndexOf(item) ); console.log(res);

about 4 years ago · Juan Pablo Isaza Relatório

0

Puede extender y agregar otra condición en su findIndex . Algo como esto

 data.filter((value, index, self) => { return ( self.findIndex((v) => v.id === value.id && v.name === value.name) === index ); });

Pero esto lleva mucho tiempo. Es mejor si crea un hash y lo usa para filtrar.

 data.reduce( (acc, current) => { acc[`${current.name}#${current.id}`] = current; return acc }, {}).values()

Lo que estoy haciendo aquí es crear una entrada para cada combinación única de name / id y luego solo obtener los valores de ese objeto.

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