¿Cómo obtener los objetos duplicados en un arreglo?
Tengo un arreglo como este:
var clients=[{"id":1,"name":"john","age":20},
{"id":3,"name":"dean","age":23},
{"id":12,"name":"harry","age":14},
{"id":1,"name":"sam","age":22},
{"id":13,"name":"Bolivia","age":16},
{"id":7,"name":"sabi","age":60},
{"id":7,"name":"sahra","age":40},
{"id":4,"name":"natie","age":53},{"id":7,"name":"many","age":22}]
Quiero encontrar los objetos duplicados y agruparlos de esta manera:
[
{
"id":1,
"clients":[
{"id":1,"name":"john","age":20},
{"id":1,"name":"sam","age":22}
]
},
{
"id":7,
"clients":[
{"id":7,"name":"sabi","age":60},
{"id":7,"name":"sahra","age":40},
{"id":7,"name":"many","age":22}
]
}
]
¿Puedo hacer eso con filter() así:
clients.reduce(//codigo aqui)
davy.ai
Es posible agrupar los objetos duplicados utilizando el método
reduce()
en JavaScript, pero no solo con el métodofilter()
.Aquí hay una forma de lograr el resultado deseado utilizando
reduce()
:Este código itera a través de cada objeto en
clientes
y verifica si ya existe un objeto en el arrayacumulador
(inicializado como un array vacío[]
) con el mismo valor deid
que el objeto actual. Si existe, agrega el objeto actual al arrayclientes
del objeto existente. Si no existe, crea un nuevo objeto con el valor deid
y un arrayclientes
que contiene solo el objeto actual, y lo agrega al arrayacumulador
.El resultado final es un array de objetos con cada valor
id
único, y un array de objetos que contiene todos los objetos duplicados con el mismoid
.Tenga en cuenta que esta solución no tiene en cuenta la ordenación del array resultante por
id
, por lo que puede ser necesario hacerlo como un paso separado si es necesario.