Hay tres objetos como este.
var Object1 = [ { "_id": "62397fd1c517e11e05935cc7", "nickname": "uknowTest2", "createdAt": "2022-03-22T07:50:41.769Z", }, { "_id": "623824ccd1164bb8d9cc2521", "nickname": "qnvvzjrh", "createdAt": "2022-03-21T07:10:04.888Z", "animalCount": 1 } ]; var Object2 = [ { "_id": "62397fd1c517e11e05935cc7", "data": 36 }, { "_id": "623824ccd1164bb8d9cc2521", "data": 542717 } ]; var Object3 = [ { "_id": "62397fd1c517e11e05935cc7", "data2": 133111 }, { "_id": "623824ccd1164bb8d9cc2521", "data2": 540517 } ];
Y quiero agruparlos así:
var result = [ { "_id": "62397fd1c517e11e05935cc7", "data": 36, "data2": 133111, "nickname": "uknowTest2", "createdAt": "2022-03-22T07:50:41.769Z", }, { "_id": "623824ccd1164bb8d9cc2521", "data": 542717, "data2": 540517, "nickname": "qnvvzjrh", "createdAt": "2022-03-21T07:10:04.888Z", "animalCount": 1 } ];
Se generan varios tipos de datos similares. No estoy seguro de qué hacer. Usar object.assign no parece ser la solución.
Esta solución está tomando la complejidad del tiempo de O(n)
Aquí tienes:
const allObj = [...Object1, ...Object2, ...Object3]; const preResult = {}; allObj.forEach((obj)=> { preResult[obj._id] = preResult[obj._id] ? {...preResult[obj._id], ...obj} : obj; }) const result = Object.values(preResult) console.log(result)
Explicación:
allObj
es la concatenación de todos los objetosallObj.forEach
está recorriendo todos los elementos (subobjetos)obj._id
(clave) ya existe en preResult
, entonces asigne {...preResult[obj._id], ...obj}
(que es la concatenación del valor existente y el valor nuevo)obj
preResult
Fragmento de código:
var Object1 = [ { "_id": "62397fd1c517e11e05935cc7", "nickname": "uknowTest2", "createdAt": "2022-03-22T07:50:41.769Z", }, { "_id": "623824ccd1164bb8d9cc2521", "nickname": "qnvvzjrh", "createdAt": "2022-03-21T07:10:04.888Z", "animalCount": 1 } ]; var Object2 = [ { "_id": "62397fd1c517e11e05935cc7", "data": 36 }, { "_id": "623824ccd1164bb8d9cc2521", "data": 542717 } ]; var Object3 = [ { "_id": "62397fd1c517e11e05935cc7", "data2": 133111 }, { "_id": "623824ccd1164bb8d9cc2521", "data2": 540517 } ]; const allObj = [...Object1, ...Object2, ...Object3]; const preResult = {}; allObj.forEach((obj)=> { preResult[obj._id] = preResult[obj._id] ? {...preResult[obj._id], ...obj} : obj; }) // console.log(preResult) const result = Object.values(preResult) console.log(result)
var Object1 = [ { "_id": "62397fd1c517e11e05935cc7", "nickname": "uknowTest2", "createdAt": "2022-03-22T07:50:41.769Z", }, { "_id": "623824ccd1164bb8d9cc2521", "nickname": "qnvvzjrh", "createdAt": "2022-03-21T07:10:04.888Z", "animalCount": 1 } ]; var Object2 = [ { "_id": "62397fd1c517e11e05935cc7", "data": 36 }, { "_id": "623824ccd1164bb8d9cc2521", "data": 542717 } ]; var Object3 = [ { "_id": "62397fd1c517e11e05935cc7", "data2": 133111 }, { "_id": "623824ccd1164bb8d9cc2521", "data2": 540517 } ]; let result = [...Object1]; let temp = [...result]; Object2.map(val=>{ result.map((val2,index)=>{ if(val2._id===val._id){ val2 = {...val2,...val}; temp[index] = val2 } }) }) result = [...temp]; Object3.map(val=>{ result.map((val2,index)=>{ if(val2._id===val._id){ val2 = {...val2,...val}; temp[index] = val2 } }) }) console.log(temp)