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

206
Vistas
Al unir dos matrices, postfije valores no únicos con (número) de forma incremental de unir la matriz

Tengo dos matrices:

  • Matriz 1: [{name: "Darin", id: "123"}, {name: "Mads", id: "345"}, {name: "Kenneth", id: "543"}, {name: "June", id: "567"}, {name: "June (1)", id: "789"}]
  • Matriz 2: [{name: "Darin", id: "910"}, {name: "June", id: "911"}, {name: "Simon", id: "912"}, {name: "Justin", id: "913"}]

La salida que quiero es la siguiente:

 [{name: "Darin", id: "123"}, {name: "Mads", id: "345"}, {name: "Kenneth", id: "543"}, {name: "June", id: "567"}, {name: "June (1)", id: "789"}, {name: "Darin (1)", id: "910"}, {name: "June (2)", id: "911"}, {name: "Simon", id: "912"}, {name: "Justin", id: "913"}]

Como puedes ver, tengo las siguientes reglas:

  • La matriz 2 debe ser la única matriz en la que posfijo (... num)
  • Los duplicados eventuales deben tener un postfijo con (número) donde el número aumenta hasta que el valor se vuelve único en la matriz unida

No estoy seguro de por dónde empezar para lograr lo anterior. Puedo ver esto resuelto con un montón de bucles y una función recursiva, pero en realidad, eso es ineficiente.

Puedo ver que Javascript ES6 ofrece algunos métodos "más nuevos" que podrían resultar útiles en este escenario, en particular map and set .

En consecuencia, mi pregunta busca comprender cómo puedo lograr lo anterior, prestando atención a la complejidad del tiempo.

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

0

Podrías contar los nombres separando las cadenas.

 const array1 = ["Darin", "Mads", "Kenneth", "June", "June (1)"], array2 = ["Darin", "June", "Simon", "Justin"], counts = {}, result = [array1, array2].reduce((r, a) => { a.forEach(v => { const [, name, , count = 0] = v.match(/^(\w*)(\s\((\d+)\))?$/); if (name in counts && count === 0) ++counts[name]; else counts[name] = count; r.push(counts[name] ? `${name} (${counts[name]})` : name); }); return r; }, []); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Usando Array.map y un objeto de contador para realizar un seguimiento de la cantidad de veces que ya se produjo cada nombre:

 var input1 = [{name: "Darin", id: "123"}, {name: "Mads", id: "345"}, {name: "Kenneth", id: "543"}, {name: "June", id: "567"}, {name: "June (1)", id: "789"}]; var input2 = [{name: "Darin", id: "910"}, {name: "June", id: "911"}, {name: "Simon", id: "912"}, {name: "Justin", id: "913"}]; var counter = {}; var combined = input1.concat(input2).map(function(e) { var strippedName = e.name.replace(/ \([0-9]+\)/, ''); counter[strippedName] = counter[strippedName] == undefined ? 0 : counter[strippedName] + 1; e.name = strippedName + (counter[strippedName] ? ' ('+counter[strippedName]+')' : ''); return e; }); console.log(combined);

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