Tengo dos matrices de objetos que necesito combinar donde la ID anidada (connect.id) de la segunda matriz coincide con la identificación de la primera pero no puedo ver cómo hacerlo
¿Alguien puede ayudar?
const arr1 = [ { "id": 7619209572755, "title": "Title 1" }, { "id": 7619209157372, "title": "Title 2" }, { "id": 7619209921625, "title": "Title 3" } ]; const arr2 = [ { "id": 7619217289192, "connect": [ { "id": 7619209157372, "title": "Title 1" } ], "value": "1" }, { "id": 7619217242206, "connect": [ { "id": 7619209921625, "title": "Title 2" } ], "value": "2" } ];
const expectedResult = [ { "id": 7619209572755, "title": "Title 1" }, { "id": 7619209157372, "title": "Title 2", "value": "1" }, { "id": 7619209921625, "title": "Title 3", "value": "2" } ]
Array#reduce
, itere sobre arr2
para mapear la id
de cada elemento de connect
con el value
de su objeto en un Map
Array#map
, itere sobre arr1
, si la id
de un elemento está en el mapa, establezca su value
const arr1 = [ { "id": 7619209572755, "title": "Title 1" }, { "id": 7619209157372, "title": "Title 2" }, { "id": 7619209921625, "title": "Title 3" } ], arr2 = [ { "id": 7619217289192, "connect": [ { "id": 7619209157372, "title": "Title 1" } ], "value": "1", }, { "id": 7619217242206, "connect": [ { "id": 7619209921625, "title": "Title 2" } ], "value": "2", } ]; const connectValueMap = arr2.reduce((map, { connect = [], value}) => { connect.forEach(({ id }) => map.set(id, value)); return map; }, new Map); const merged = arr1.map(e => { const value = connectValueMap.get(e.id); if(value) e.value = value; return e; }); console.log(merged);