es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible agrupar los objetos duplicados utilizando el método reduce() en JavaScript, pero no solo con el método filter().

    Aquí hay una forma de lograr el resultado deseado utilizando reduce():

    var resultado = clientes.reduce(function(acumulador, actual) {
      var existente = acumulador.find(function(item) {
        return item.id === actual.id;
      });
    
      if (existente) {
        existente.clientes.push(actual);
      } else {
        acumulador.push({
          id: actual.id,
          clientes: [actual]
        });
      }
    
      return acumulador;
    }, []);
    

    Este código itera a través de cada objeto en clientes y verifica si ya existe un objeto en el array acumulador (inicializado como un array vacío []) con el mismo valor de id que el objeto actual. Si existe, agrega el objeto actual al array clientes del objeto existente. Si no existe, crea un nuevo objeto con el valor de id y un array clientes que contiene solo el objeto actual, y lo agrega al array acumulador.

    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 mismo id.

    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.

Comments are closed.