diginext-utils
Version:
README.md
40 lines • 1.24 kB
JavaScript
import { isObject } from "./isObject.js";
/**
* Deeply merges multiple objects into a new object.
* Later objects' properties override earlier ones.
* Nested objects are merged recursively.
*
* @template T - The type of the target object
* @param objects - Objects to merge
* @returns A new merged object
*
* @example
* ```ts
* merge({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }
* merge({ a: 1, b: { c: 2 } }, { b: { d: 3 } }); // { a: 1, b: { c: 2, d: 3 } }
* merge({ a: 1 }, { a: 2 }); // { a: 2 }
* ```
*/
export function merge(...objects) {
const result = {};
for (const obj of objects) {
if (!isObject(obj)) {
continue;
}
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
const value = obj[key];
if (isObject(value) && isObject(result[key])) {
// Deep merge nested objects
result[key] = merge(result[key], value);
}
else {
// Direct assignment for primitives and arrays
result[key] = value;
}
}
}
}
return result;
}
//# sourceMappingURL=merge.js.map