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