Skip to main content

mergeDeepRight()

mergeDeepRight<T, U>(left, right): T & U

Recursively merges objects, with right values taking precedence.

note

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 (fallback values).

right: Uโ€‹

The right object (takes precedence).


Returns: T & Uโ€‹

A new deeply merged object.


See Alsoโ€‹

mergeDeepLeft


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' } };

mergeDeepRight(left, right);
// => { user: { name: 'Jane', age: 30, email: 'jane@example.com' } }

// Arrays: right wins
mergeDeepRight({ items: [1, 2] }, { items: [3, 4] });
// => { items: [3, 4] }

Use Casesโ€‹

Merge with override precedence ๐Ÿ“Œโ€‹

Merge objects recursively where the second object (right) overrides the first. Essential for applying configuration overrides or patching state.

const finalConfig = mergeDeepRight(defaultConfig, userConfig);
// userConfig overrides defaults

Patch complex stateโ€‹

Apply a partial update to a deep state tree. Critical for reducer logic in state management.

const nextState = mergeDeepRight(currentState, {
ui: { sidebar: { isOpen: true } } // Only updates isOpen, preserves other ui props
});

Combine nested defaultsโ€‹

Merge layers of configuration where inner layers override outer ones.

const effective = mergeDeepRight(globalProps, localProps);