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

221
Vistas
¿Cómo fusionar dos matrices usando una propiedad?

Quiero crear una matriz (de salida) de objetos a partir de una o varias matrices (de entrada).

Para dos matrices de entrada definidas como:

 var array1 = [ { id: 1, name: 'a1'}, { id: 2, name: 'a2'}, { id: 3, name: 'a3'}, { id: 4, name: 'a4'}, { id: 5, name: 'a5'}, ]; var array2 = [ { id: 1, name: 'a1', sub: { data: 'we' } }, { id: 2, name: 'a2', sub: { data: 'dfd' } }, { id: 5, name: 'a5', sub: { data: 'vbf' } }, ];

... la matriz resultante (de salida) debería ser:

 var newarray = [ { id: 1, name: 'a1', sub: { data: 'we' } }, { id: 2, name: 'a2', sub: { data: 'dfd' } }, { id: 3, name: 'a3', sub: {}}, { id: 4, name: 'a4', sub: {}}, { id: 5, name: 'a5', sub: { data: 'vbf' } }, ];

He intentado lo siguiente, pero hay un error en alguna parte:

 var newarray = []; var oArray = {}; for(var i = 0; i <= array1.length;) { for(var j = 0; j <= array2.length; j++) { if(array1[i].id === array2[j].id) { oArray = { "id": array1[i].id, "name": array1[i].name, "sub": array1[i].sub }; newarray.push(oArray); i++; break; } else { oArray = { "id": array1[i].id, "name": array1[i].name, "sub": array1[i].sub }; newarray.push(oArray); } } }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Realmente debería asegurarse de que los límites de índice para sus bucles sean correctos. <=length causará un problema en cualquier matriz.

Además, sugeriría primero ingresar a la matriz desde array1 , y luego en el bucle interno buscando en la matriz para encontrar la identificación coincidente de array1 . Y simplemente actualizando.

 var array1 = [ { id: 1, name: 'a1'}, { id: 2, name: 'a2'}, { id: 3, name: 'a3'}, { id: 4, name: 'a4'}, { id: 5, name: 'a5'}, ]; var array2 = [ { id: 1, name: 'a1', sub: { data: 'we' } }, { id: 2, name: 'a2', sub: { data: 'dfd' } }, { id: 5, name: 'a5', sub: { data: 'vbf' } }, ]; var newarray = []; for(var i = 0; i < array1.length;i++) { let oArray = { "id": array1[i].id, "name": array1[i].name, "sub": {} }; newarray.push(oArray); for(var j = 0; j < array2.length; j++) { if(array1[i].id === array2[j].id) { let found = newarray.find(x => x.id === array2[j].id); if(found) found.sub =array2[j].sub; } } } console.log(newarray);

let found = newarray.find(x => x.id === array2[j].id);

find() se usa para buscar y devolver algo en la matriz según la condición específica. Si la función interna devuelve verdadero para cualquier índice de matriz, se devuelve el elemento en ese índice. En nuestra condición, verificamos que coincida con la id y volvemos en función de eso. Entonces, found es finalmente el elemento encontrado basado en la condición. Por eso solo si existe, estamos accediendo a su propiedad. Si no se encuentra, se vuelve undefined .

La función de flecha anterior bien podría escribirse como:

let found = newarray.find(function (x) { return (x.id === array2[j].id) });

Hay muchas otras formas de hacerlo, pero esta es la más cercana a su enfoque y lo mejora.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar el map para revisar la matriz y find para encontrar el elemento correspondiente y luego fusionarlos como desee.

 const array1 = [ { id: 1, name: 'a1'}, { id: 2, name: 'a2'}, { id: 3, name: 'a3'}, { id: 4, name: 'a4'}, { id: 5, name: 'a5'}, ]; const array2 = [ { id: 1, name: 'a1', sub: { data: 'we' } }, { id: 2, name: 'a2', sub: { data: 'dfd' } }, { id: 5, name: 'a5', sub: { data: 'vbf' } }, ]; const outcome = array1.map((x) => { const corresponding = array2.find((y) => y.name === x.name); return { ...x, sub: corresponding ? corresponding.sub : {} } }); console.log(outcome);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Usé una función de mapa en lugar de un bucle for. Aquí está mi solución:

 var array1 = [ { id: 1, name: 'a1'}, { id: 2, name: 'a2'}, { id: 3, name: 'a3'}, { id: 4, name: 'a4'}, { id: 5, name: 'a5'}, ]; var array2 = [ { id: 1, name: 'a1', sub: { data: 'we' } }, { id: 2, name: 'a2', sub: { data: 'dfd' } }, { id: 5, name: 'a5', sub: { data: 'vbf' } }, ]; let noSubs = array1.filter(el => ! array2.map(element => element.id).includes(el.id)); let newArray = noSubs.concat(array2); console.log(newArray);

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