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

134
Vistas
Actualizar valores duplicados de una matriz de objetos en ES6

tengo una matriz como

 const arr = [ {id: '1', name: 'name 1', age: 20}, {id: '2', name: 'name 2', age: 21}, {id: '2', name: 'name 3', age: 22}, {id: '2', name: 'name 4', age: 23}, {id: '3', name: 'name 5', age: 24}, {id: '3', name: 'name 6', age: 25}, {id: '4', name: 'name 7', age: 26}, {id: '5', name: 'name 8', age: 27}, {id: '5', name: 'name 9', age: 28}, {id: '5', name: 'name 10', age: 29}, ];

Sé que tengo duplicados (buscando solo la propiedad de identificación) en la matriz y no quiero eliminar los duplicados en su lugar, necesito agregar algo para diferenciar.

 arr = [ {id: '1_0', name: 'name 1', age: 20}, {id: '2_0', name: 'name 2', age: 21}, {id: '2_1', name: 'name 3', age: 22}, {id: '2_2', name: 'name 4', age: 23}, {id: '3_0', name: 'name 5', age: 24}, {id: '3_1', name: 'name 6', age: 25}, {id: '4_0', name: 'name 7', age: 26}, {id: '5_0', name: 'name 8', age: 27}, {id: '5_1', name: 'name 9', age: 28}, {id: '5_2', name: 'name 10', age: 29}, ];

Gracias por adelantado.

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

0

Podría tomar un objeto para contar y mapear nuevos objetos con subversiones.

Esta respuesta presenta un cierre.

 (ids => o => ({ ...o, id: `${o.id}_${ids[o.id] ??= 0, ids[o.id]++}` })) ({})

donde la función se llama con un objeto y devuelve otra función

 o => ({ ...o, id: `${o.id}_${ids[o.id] ??= 0, ids[o.id]++}` })

para el mapeo.

La función de mapeo devuelve un nuevo objeto con un reemplazo de la propiedad id con parte de la id anterior y un nuevo valor que comienza con cero para cualquier id no vista.

 const array = [{ id: '1', name: 'name 1', age: 20 }, { id: '2', name: 'name 2', age: 21 }, { id: '2', name: 'name 3', age: 22 }, { id: '2', name: 'name 4', age: 23 }, { id: '3', name: 'name 5', age: 24 }, { id: '3', name: 'name 6', age: 25 }, { id: '4', name: 'name 7', age: 26 }, { id: '5', name: 'name 8', age: 27 }, { id: '5', name: 'name 9', age: 28 }, { id: '5', name: 'name 10', age: 29 }], result = array.map( (ids => o => ({ ...o, id: `${o.id}_${ids[o.id] ??= 0, ids[o.id]++}` })) ({}) ); console.log(result);
 .as-console-wrapper { max-height:100% !important; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

1) Puede lograr fácilmente el resultado usando Map

 const arr = [ { id: "1", name: "name 1", age: 20 }, { id: "2", name: "name 2", age: 21 }, { id: "2", name: "name 3", age: 22 }, { id: "2", name: "name 4", age: 23 }, { id: "3", name: "name 5", age: 24 }, { id: "3", name: "name 6", age: 25 }, { id: "4", name: "name 7", age: 26 }, { id: "5", name: "name 8", age: 27 }, { id: "5", name: "name 9", age: 28 }, { id: "5", name: "name 10", age: 29 }, ]; const map = new Map(); arr.forEach((o) => map.has(o.id) ? map.get(o.id).push(o) : map.set(o.id, [o])); const result = []; for (let [, arr] of map) { arr.forEach((o, i) => result.push({ ...o, id: `${o.id}_${i}` })); } console.log(result);
 /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

2) También puede usar aquí mapa con Mapa (Gracias a VLAZ )

 const arr = [ { id: "1", name: "name 1", age: 20 }, { id: "2", name: "name 2", age: 21 }, { id: "2", name: "name 3", age: 22 }, { id: "2", name: "name 4", age: 23 }, { id: "3", name: "name 5", age: 24 }, { id: "3", name: "name 6", age: 25 }, { id: "4", name: "name 7", age: 26 }, { id: "5", name: "name 8", age: 27 }, { id: "5", name: "name 9", age: 28 }, { id: "5", name: "name 10", age: 29 }, ]; const map = new Map(); const result = arr.map((curr) => { map.set(curr.id, (map.get(curr.id) ?? -1) + 1); return { ...curr, id: `${curr.id}_${map.get(curr.id)}` }; }); console.log(result);
 /* This is not a part of answer. It is just to give the output full height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Se necesita una sola iteración:

 const arr = [ {id: '1', name: 'name 1', age: 20}, {id: '2', name: 'name 2', age: 21}, {id: '2', name: 'name 3', age: 22}, {id: '2', name: 'name 4', age: 23}, {id: '3', name: 'name 5', age: 24}, {id: '3', name: 'name 6', age: 25}, {id: '4', name: 'name 7', age: 26}, {id: '5', name: 'name 8', age: 27}, {id: '5', name: 'name 9', age: 28}, {id: '5', name: 'name 10', age: 29}, ]; //keep track of how many times each id has been encountered const counterPerRecord = new Map(); for (const record of arr) { //get count or default to zero const next = counterPerRecord.get(record.id) ?? 0; //update the count for next time we encounter the id counterPerRecord.set(record.id, next+1); //update the id record.id += `_${next}`; } console.log(arr);
 .as-console-wrapper { max-height:100% !important; }

Solo necesita un mapa para realizar un seguimiento de cuál es la próxima instancia para el próximo número que se agregará a cada propiedad de id . La primera vez es cero, y aumenta cada vez que encuentra la misma id .

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