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

189
Vistas
¿Cómo recorrer dos matrices y encontrar un objeto de valor común? Javascript usando forEach

Necesito recorrer dos matrices y encontrar dónde está el valor expandido = verdadero establecido en la primera matriz.

ejemplo de la primera matriz:

 [ { id: 1 , name: 'Test 1' , expended = false }, { id: 2 , name: 'Test 2' , expended = false }, { id: 3 , name: 'Test 3' , expended = false } ]

ejemplo de la segunda matriz:

 [ { id: 1 , name: 'Test 1' , expended = false }, { id: 2 , name: 'Test 2' , expended = true }, { id: 3 , name: 'Test 3' , expended = false } ]

La diferencia entre dos matrices es solo el valor gastado donde está en la segunda matriz:

 { id: 2 , name: 'Test 2' , expended = true }

Necesito hacer un bucle pensando en la primera matriz y en la segunda y encontrar en la segunda matriz donde se gasta = verdadero y simplemente pegar en la primera matriz.

El resultado esperado arriba después del bucle debería ser:

primer valor de matriz

 [ { id: 1 , name: 'Test 1' , expended = false }, { id: 2 , name: 'Test 2' , expended = true }, { id: 3 , name: 'Test 3' , expended = false } ]

¡Por favor, no puedo simplemente copiar el valor de toda la matriz!

este ejemplo no es aceptado:

este.segundoArray = este.primerArray..

Este es un ejemplo simple que te envié. ¡Tengo 10 parámetros más en el objeto que están cambiando, pero solo es importante para mí gastarme en copiar!

Literalmente, el valor gastado de la segunda matriz para copiar a la primera y ¡eso es todo!

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

0

Puede lograr el resultado usando Mapa y mapa

Puede establecer el valor de expended si el valor de expended de arr1 es falso como

 arr1.map((o) => ({ ...o, expended: o.expended || map.get(o.id).expended })) 

 const arr1 = [ { id: 1, name: "Test 1", expended: false }, { id: 2, name: "Test 2", expended: false }, { id: 3, name: "Test 3", expended: false }, ]; const arr2 = [ { id: 1, name: "Test 1", expended: false }, { id: 2, name: "Test 2", expended: true }, { id: 3, name: "Test 3", expended: false }, ]; const map = new Map(arr2.map((o) => [o.id, o])); const result = arr1.map((o) => ({ ...o, expended: o.expended || map.get(o.id).expended })); console.log(result);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

Si quieres el resultado con forEach

 const arr1 = [ { id: 1, name: "Test 1", expended: false }, { id: 2, name: "Test 2", expended: false }, { id: 3, name: "Test 3", expended: false }, ]; const arr2 = [ { id: 1, name: "Test 1", expended: false }, { id: 2, name: "Test 2", expended: true }, { id: 3, name: "Test 3", expended: false }, ]; arr1.forEach((obj) => { const elementInArr2 = arr2.find((o) => o.id === obj.id); if (elementInArr2) obj.expended = obj.expended || elementInArr2.expended; }); console.log(arr1);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

  • Usando Array#reduce , itere sobre la segunda matriz mientras actualiza un Map , si el expended del objeto es true , establezca la clave en la id y el valor en el objeto
  • Usando Array#map , itere sobre la primera matriz. Para cada objeto, verifique si el mapa anterior tiene su id y reemplácelo, de lo contrario, consérvelo

 let arr1 = [ { id: 1, name: 'Test 1', expended: false }, { id: 2, name: 'Test 2', expended: false }, { id: 3, name: 'Test 3', expended: false } ], arr2 = [ { id: 1, name: 'Test 1', expended: false }, { id: 2, name: 'Test 2', expended: true }, { id: 3, name: 'Test 3', expended: false } ]; const expenededMap = arr2.reduce((map, obj) => { if(obj.expended) map.set(obj.id, obj); return map; }, new Map); arr1 = arr1.map(obj => { if(obj.expended) return obj; const objFromArr2 = expenededMap.get(obj.id) || {}; return objFromArr2.expended ? objFromArr2 : obj; }); console.log(arr1);

Usando solo Array#forEach y Array#find :

 let arr1 = [ { id: 1, name: 'Test 1', expended: false }, { id: 2, name: 'Test 2', expended: false }, { id: 3, name: 'Test 3', expended: false } ], arr2 = [ { id: 1, name: 'Test 1', expended: false }, { id: 2, name: 'Test 2', expended: true }, { id: 3, name: 'Test 3', expended: false } ]; arr1.forEach((obj, i, arr) => { if(!obj.expended) { const objFromArr2 = arr2.find(({ id }) => id === obj.id) || {}; if(objFromArr2.expended) arr[i] = objFromArr2; } }); console.log(arr1);

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