En JavaScript, puedes fusionar dos objetos utilizando el operador de propagación (...
). Esta función usa el operador de propagación para conseguir el merge y devuelve el nuevo objeto mergeado.
function mergeObjects(obj1, obj2) {
return { ...obj1, ...obj2 };
}
// Ejemplo de uso:
const objA = { a: 11, b: 22 };
const objB = { b: 33, c: 44 };
const resultado = mergeObjects(objA, objB);
console.log(resultado); // Object { a: 11, b: 33, c: 44 }
Ten en cuenta que si ambos objetos tienen propiedades con el mismo nombre, el valor del segundo objeto (obj2
) se sobrescribirá sobre el valor del primer objeto (obj1
). Por lo tanto el orden con el que hagas el merge importa bastante.
Si quieres hacer un merge profundo (deep merge, es decir, también fusionar objetos anidados en lugar de sobrescribirlos), el proceso resulta un poco más complicado.
Si fuera el caso podrías hacerlo con una función como esta:
function deepMerge(obj1, obj2) {
const result = { ...obj1 };
for (const key in obj2) {
if (obj2.hasOwnProperty(key)) {
if (typeof obj2[key] === 'object' && obj2[key] !== null && obj1.hasOwnProperty(key) && typeof obj1[key] === 'object') {
result[key] = deepMerge(obj1[key], obj2[key]);
} else {
result[key] = obj2[key];
}
}
}
return result;
}
// Ejemplo de uso:
const objComplejoA = { a: 1, b: { x: 10, y: 20 } };
const objComplejoB = { b: { y: 30, z: 40 }, c: 4 };
const result = deepMerge(objComplejoA, objComplejoB);
console.log(result); // { a: 1, b: { x: 10, y: 30, z: 40 }, c: 4 }
Esta función no maneja arrays ni otras estructuras de datos más complejas. Para fusiones más complicadas, puedes quizás te recomendaría usar bibliotecas como Lodash, que ofrece una función _.merge()
que puede manejar otras sitaciones más complejas que las que soluciona este deep merge.