¿Cómo hacer un “inner join” entre dos arrays mediante una clave en JavaScript?
Tengo dos matrices que contienen objetos de esta manera:
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 combinarlos de manera que la matriz combinada solo contenga datos en los que el “id” aparezca tanto en array1 como en array2.
Hasta ahora estoy utilizando 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 que “merged” solo contenga datos en los que el “id” aparezca 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 SQL sería un “Inner join”.
¡Cualquier ayuda sería muy apreciada!
davy.ai
Para combinar las dos matrices de manera que solo los datos con el mismo
id
aparezcan en la matriz final, puedes usar el métodoArray.filter()
y el métodoArray.find()
. Aquí tienes un ejemplo:Lo que esto hace es iterar a través de
array1
usando el métodoArray.filter()
, y para cada objeto enarray1
, busca un objeto con el mismoid
enarray2
usando el métodoArray.find()
. Si encuentra una coincidencia, fusiona los dos objetos usando la sintaxis de propagación (...
), y devuelve el objeto fusionado. Si no encuentra una coincidencia, devuelve false y lo filtra de la matriz final.La matriz resultante
merged
contendrá sólo datos dondeid
aparezca en ambasarray1
yarray2
.