Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

187
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!