Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

144
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda