Difference Between _.assign() & _.merge() Method in Lodash

Lodash is a JavaScript library that works on the top of underscore.js. It helps in working with arrays, strings, objects, numbers, etc. It provides us with various inbuilt functions and uses a functional programming approach.

Installation

To use Lodash, first install the package using npm:

npm install lodash

Lodash _.assign() Method

_.assign performs a shallow merge of objects. It copies properties from one or more source objects into a target object, directly modifying the target. Nested objects are merged by reference, not by creating deep copies.

Example 1: Basic Usage

JavaScript
const _ = require('lodash');

let target = { a: 1, b: 2 };
let source = { b: 3, c: 4 };

_.assign(target, source);
console.log(target);

Output :

{ a: 1, b: 3, c: 4 }

Example 2: Nested Objects

JavaScript
const _ = require('lodash');

let target = { a: { x: 1 }, b: 2 };
let source = { a: { y: 2 }, c: 3 };

_.assign(target, source);
console.log(target);

Output:

{ a: { y: 2 }, b: 2, c: 3 }

Lodash _.merge() Method

_.merge offers deep merge functionality. It recursively combines properties from source objects into a brand new target object. This preserves the original target object and creates deep copies for nested objects, allowing independent modifications.

Example 1: Basic Usage

JavaScript
const _ = require('lodash');

let target = { a: 1, b: 2 };
let source = { b: 3, c: 4 };

let result = _.merge({}, target, source);
console.log(result);

Output:

{ a: 1, b: 3, c: 4 }

Example 2: Nested Objects

JavaScript
const _ = require('lodash');

let target = { a: { x: 1 }, b: 2 };
let source = { a: { y: 2 }, c: 3 };

let result = _.merge({}, target, source);
console.log(result);

Output:

{ a: { x: 1, y: 2 }, b: 2, c: 3 }

Difference between Lodash _.assign() Method and _.merge() Method

Feature

`_.assign()`

`_.merge()`

Copy Type

Shallow copy (modifies the target object)

Deep copy (creates a new target object)

Mutability

Modifies the target object directly

Returns a new object, leaving the target unmodified

Nested Objects M

Objects Overwritten by reference from source objects

Recursively merged, preserving original nested structures

Suitable for

Simple merging, combining basic properties

Complex object structures, deep merging with independence