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

99
Vistas
Cómo fusionar 2 matrices con objetos anidados en 1 matriz sin duplicados

Tengo dos matrices de objetos como este:

 const oldArr = [ { 'Tomorrow': [{ id: 2 }, { id: 4 }, { id: 3 }] }, { 'Saturday': [{ id: 2 }, { id: 4 }, { id: 3 }] } ] const newArr = [ { 'Monday': [{ id: 2 },{ id: 4},{ id: 3 }] }, { 'Tomorrow': [{ id: 1 },{ id: 5 }]} ]

Quiero fusionar ambos sin claves duplicadas, por lo que debería dar como resultado:

 [ { 'Tomorrow': [{ id: 2 }, { id: 4 }, { id: 3 }, { id: 1 }, { id: 5 }] }, { 'Saturday': [{ id: 2 }, { id: 4 }, { id: 3 }] }, { 'Monday': [{ id: 2 }, { id: 4 }, { id: 3 }] } ]

Como puede ver, los contenidos de Tomorrow se han agregado al Tomorrow original, y se ha agregado el objeto Monday .

He descubierto vagamente cómo hacerlo con bucles anidados, pero supongo que hay una solución más simple usando map , reduce o similar.

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

0

Esto se puede lograr fácilmente con una combinación de la ordenada sintaxis de distribución de javascript, las funciones de prototipo de Array y Object, y los patrones de desestructuración.

 [...oldArr, ...newArr].flatMap(Object.entries).reduce( (acc, [k, v]) => ({ ...acc, [k]: [...acc[k]||[], ...v] }), {})

¡Tan simple como esto!

 const oldArr = [ {'Tomorrow': [{'id':2},{'id':4},{'id':3}]}, {'Saturday': [{'id':2},{'id':4},{'id':3}]} ] const newArr = [ {'Monday': [{'id':2},{'id':4},{'id': 3}]}, {'Tomorrow': [{'id':1},{'id':5}]} ] const result = [...oldArr, ...newArr].flatMap(Object.entries).reduce( (acc, [k, v]) => ({ ...acc, [k]: [...acc[k]||[], ...v] }), {}) console.log(result)


Para obtener una explicación muy detallada de cómo funciona esto, consulte esta respuesta ampliada a una pregunta similar. La diferencia en esa otra pregunta es que allí, cada objeto interno tenía solo un objeto como valor, en lugar de una matriz.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Esto se puede lograr iterando las matrices combinadas para generar un objeto con todos los valores para cada clave en las matrices; luego usando Object.entries para mapear eso de nuevo al formato original:

 const oldArr = [ {'Tomorrow': [{'id':2},{'id':4},{'id':3}]}, {'Saturday': [{'id':2},{'id':4},{'id':3}]} ] const newArr = [ {'Monday': [{'id':2},{'id':4},{'id': 3}]}, {'Tomorrow': [{'id':1},{'id':5}]} ] const result = Object.entries(oldArr.concat(newArr) .reduce((a, o) => { let k = Object.keys(o)[0] a[k] = (a[k] || []).concat(o[k]) return a }, {}) ).map(([k, v]) => ({ [k] : v})) console.log(result)

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