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.
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)