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

222
Views
¿Cómo "unir internamente" dos matrices mediante una clave en javascript?

Tengo dos matrices que contienen objetos así:

 const array1 = [ { "id": 1, "mass": 149, "height": 180, "dob": "2003-09-04" }, { "id": 2, "mass": 140, "height": 175, "dob": "2000-02-12", }, { "id": 3, "mass": 143, "height": 170, "dob": "2001-11-04" } ] const array2 = [ { "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ]

Me gustaría fusionarlos de manera que una matriz combinada solo contenga datos donde la id aparece tanto en la matriz1 como en la matriz2.

Hasta ahora estoy usando lodash _.merge que devuelve:

 const merged = _.merge(array1, array2) merged = [ { "id": 1, "mass": 149, "height": 180, "dob": "2003-09-04", "name": "James", "sport": "Football" }, { "id": 2, "mass": 140, "height": 175, "dob": "2000-02-12", "name": "Adam", "sport": "Tennis" }, { "id": 3, "mass": 143, "height": 170, "dob": "2001-11-04" , } ]

Me gustaría merged para contener datos donde la id aparece en ambos, es decir:

 [{ "id": 1, "mass": 149, "height": 180, "dob": "2003-09-04", "name": "James", "sport": "Football" }, { "id": 2, "mass": 140, "height": 175, "dob": "2000-02-12", "name": "Adam", "sport": "Tennis" }]

Creo que la función equivalente en algo como SQL sería una "unión interna"

¡Cualquier ayuda sería muy apreciada!

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Necesita mapearlos de uno a otro. Idea básica usando reduce donde rastreamos el artículo por la identificación.

 const array1 = [{ "id": 1, "mass": 149, "height": 180, "dob": '2003-09-04' }, { "id": 2, "mass": 140, "height": 175, "dob": '2000-02-12', }, { "id": 3, "mass": 143, "height": 170, "dob": '2001-11-04' } ] const array2 = [{ "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ] const result = Object.values([...array1, ...array2].reduce((acc, userData) => { // have you seen the id before? If yes, use it, if no use and empty object const data = acc[userData.id] || {}; //merge the objects together and store the updated data by the id acc[userData.id] = { ...data, ...userData }; return acc }, {})); console.log(result);

Ahora eso incluirá todo. Si solo desea los elementos que están en ambos, puede hacerlo en dos bucles.

 const array1 = [{ "id": 1, "mass": 149, "height": 180, "dob": '2003-09-04' }, { "id": 2, "mass": 140, "height": 175, "dob": '2000-02-12', }, { "id": 3, "mass": 143, "height": 170, "dob": '2001-11-04' } ] const array2 = [{ "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ] // create a look up by the id const array1MappedById = array1.reduce((acc, userData) => { acc[userData.id] = userData; return acc }, {}); // Loop over the second array and make a new array with the merged data const result = array2.reduce((arr, userData) => { const array1Data = array1MappedById[userData.id]; // if the data exists in the map, then we should merge the data if (array1Data) { arr.push({...array1Data, ...userData}); } return arr; }, []); console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

Puede filtrar su primera matriz con Array.filter para incluir solo los objetos que están presentes en su segunda matriz antes de realizar la misma combinación.

 let merged = array1.filter(e => array2.some(f => f.id == e.id)); 

 const array1 = [ { "id": 1, "mass": 149, "height": 180, "dob": 2003-09-04 }, { "id": 2, "mass": 140, "height": 175, "dob": 2000-02-12, }, { "id": 3, "mass": 143, "height": 170, "dob": 2001-11-04 } ] const array2 = [ { "id": 1, "name": "James", "sport": "Football" }, { "id": 2, "name": "Adam", "sport": "Tennis" } ] let merged = array1.filter(e => array2.some(f => f.id == e.id)); merged = _.merge(merged, array2); console.log(merged);
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

about 4 years ago · Juan Pablo Isaza Report

0

esto fusionará los datos donde la identificación es la misma identificación

 const merged = array2.reduce((arr, current) => { let array1Data = {...array1}[current.id]; if (array1Data) { arr.push({...array1Data, ...current}); } return arr; }, []); console.log(merged);
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!