Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
¿Cómo filtrar una matriz de objetos en múltiples condiciones y agregar una excepción?

Actualmente tengo una variedad de objetos que se filtran en función de las ID únicas y los nombres únicos que están juntos:

Entrada inicial:

 const data = [ { id: 1234, name: "Name1" }, { id: 1234, name: "Name1" }, { id: 1234, name: "Name2" }, { id: 1234, name: null }, { id: 5678, name: "Name3" }, { id: 5678, name: "Name3" }, { id: 5678, name: null }, { id: 9999, name: null }, { id: 9999, name: null }, ];
 data.filter((value, index, self) => { return ( self.findIndex( (v) => v.id === value.id && v.name=== value.name ) === index ); });
 [ { id: 1234 name: "Name1" }, { id: 1234 name: "Name2" }, { id: 1234 name: null }, { id: 5678 name: null }, { id: 5678 name: "Name3" }, { id: 9999 name: null }, ]

Sin embargo, algunas identificaciones no tienen ningún duplicado y quiero eliminar todos los objetos asociados con el nombre nulo, EXCEPTO donde la identificación no es un duplicado y se parece a lo siguiente:

 [ { id: 1234 name: "Name1" }, { id: 1234 name: "Name2" }, { id: 5678 name: "Name3" }, { id: 9999 name: null }, ]

Por el momento aún existen los Ids duplicados con nombres nulos.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Mantuve la parte de filtrado que implementó como salida intermedia. usando eso obtuve un conteo para cada identificación. luego, usando eso, lo filtré de la matriz intermedia donde, si tiene un recuento> 1 y tiene un nombre nulo, lo elimino.

 const data = [{id: 1234,name: "Name1"},{id: 1234,name: "Name1"},{id: 1234,name: "Name2"},{id: 1234,name: null},{id: 5678,name: "Name3"},{ id: 5678,name: "Name3"},{id: 5678,name: null},{id: 9999,name: null},{id: 9999,name: null},]; //filtering out duplicates let a = data.filter((value, index, self) => { return ( self.findIndex( (v) => v.id === value.id && v.name=== value.name ) === index ); }); //get count for ids in partially filtered let idcount = a.reduce((acc,curr) => { if(!acc[curr.id])acc[curr.id] = 0 acc[curr.id] += 1 return acc; },{}) //remove the duplicate nulls let final = a.filter((el) => { return !(idcount[el.id]>1 && el.name===null) }) console.log(final)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda