Deep Merge Configuration Objects
Merge nested config objects where later sources override earlier scalars but nested objects are combined recursively, a common layering need.
Code
export function deepMerge(...sources) {
const result = {};
for (const source of sources) {
if (!source || typeof source !== "object") continue;
for (const [key, value] of Object.entries(source)) {
const existing = result[key];
if (isPlainObject(existing) && isPlainObject(value)) {
result[key] = deepMerge(existing, value);
} else if (Array.isArray(value)) {
result[key] = value.slice();
} else {
result[key] = value;
}
}
}
return result;
}
function isPlainObject(value) {
return value !== null && typeof value === "object" && !Array.isArray(value);
}Report a problem with this exampleOpens a pre-filled issue on GitHub.