mergeDeepLeft()
mergeDeepLeft<
T,U>(left,right):T&U
Recursively merges objects, with left values taking precedence.
Arrays are replaced, not merged.
Type Parametersβ
T: T extends AnyRecordβ
The type of the left object.
U: U extends AnyRecordβ
The type of the right object.
Parametersβ
left: Tβ
The left object (takes precedence).
right: Uβ
The right object (fallback values).
Returns: T & Uβ
A new deeply merged object.
See Alsoβ
Sinceβ
2.0.0
Noteβ
Symbol keys are included via Reflect.ownKeys.
Performanceβ
O(n) time & space where n is total number of properties. Early returns for null/undefined/primitives/arrays. Uses spread operator for shallow copy.
Exampleβ
const left = { user: { name: 'John', age: 30 } };
const right = { user: { name: 'Jane', email: 'jane@example.com' } };
mergeDeepLeft(left, right);
// => { user: { name: 'John', age: 30, email: 'jane@example.com' } }
// Arrays: left wins
mergeDeepLeft({ items: [1, 2] }, { items: [3, 4] });
// => { items: [1, 2] }
Use Casesβ
Merge with default precedence πβ
Merge objects recursively where the first object (left) keeps its values if conflicts occur. Useful for preserving original state while filling in gaps.
const result = mergeDeepLeft(defaults, overrides);
// defaults are kept, overrides only add new keys
Preserve initialization dataβ
Merge new data into an object, but refuse to overwrite any existing values. Useful for "fill only if empty" logic.
const session = { id: 123 };
const newInfo = { id: 456, name: 'Guest' };
const result = mergeDeepLeft(session, newInfo);
// { id: 123, name: 'Guest' } - id preserved
Fill missing dataβ
Populate a sparse object with data from a complete template. Useful for restoring partial backups or checking schema compliance.
const complete = mergeDeepLeft(template, partialData);