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

116
Vistas
Actualice el valor del objeto anidado en la matriz según la clave

tengo dos conjuntos de objetos como los siguientes, estoy tratando de comparar dos conjuntos y buscando actualizar el valor total del objeto de arr1 si la identificación coincide con arr2.

 const arr1 = [ { id: 1, value: { total: 0 }, }, { id: 2, value: { total: 0 }, }, { id: 3, value: { total: 0 }, }, id: 4, value: { total: 0 }, }, ]; const arr2 = [ { id: 2, value: 3 , }, { id: 3, value: 5, }, ];

Estoy tratando de comparar dos matrices y buscando actualizar el valor total del objeto de arr1 si la identificación coincide con arr2

el resultado esperado es

 const arr1 = [ { id: 1, value: { total: 0 }, }, { id: 2, value: { total: 3 }, }, { id: 3, value: { total: 5 }, }, { id: 4, value: { total: 0 }, }, ];

He probado el siguiente código,

 arr1.map((item) => { arr2.find((element) => { if (element.id === item.id ) { item = { ...item, value: { ...item.value, total: item.value.total + element.value, }, }; console.log(item); } }); return item; });
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Cambié la función de búsqueda a la función de filtro y agregaré el resultado a la matriz original.

prueba esto

 const arr1 = [ { id: 1, value: { total: 0 }, }, { id: 2, value: { total: 0 }, }, { id: 3, value: { total: 0 }, }, { id: 4, value: { total: 0 }, } ] const arr2 = [ { id: 2, value: 3 , }, { id: 3, value: 5, }, ]; arr1.map((item) => { let result = arr2.filter((element) => element.id == item.id) if(result && result.length) { item.value.total += result[0].value } return item; }); console.log(arr1)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Tienes que asignar un mapa a tu matriz:

 this.arr1 = this.arr1.map((item) => { this.arr2.find((element) => { if (element.id === item.id) { item = { ...item, value: { ...item.value, total: item.value.total + element.value, }, }; console.log(item); } }); return item; });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Si la id de cada objeto es única (dentro de cada matriz), puede hacer:

 arr1.forEach((obj1) => { const obj2Match = arr2.find((obj2) => obj1.id === obj2.id ); if (obj2Match) { obj1.value.total += obj2Match.value; } });

Si más de un objeto puede tener la misma id (por ejemplo, arr2 tiene dos objetos que tienen la id de 2), entonces puede hacer lo siguiente:

 arr1.forEach((obj1) => { const obj2Matches = arr2.filter((obj2) => obj1.id === obj2.id ); if (obj2Matches.length) { obj1.value.total += obj2Matches.reduce(((accum, curr) => accum + curr.value), 0); } });

Complejidad:

  • Hora: O(N * M)
  • Espacio: O(M)
  • N => arr1.longitud, M => arr2.longitud
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