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);