Table of contents
1.
Introduction
2.
Why This Function is Used
3.
Syntax, Parameter and Return Value
3.1.
Syntax: 
3.2.
Parameters:
3.3.
Return Value: 
4.
Examples 
4.1.
Customizing Property Assignment:
4.2.
JavaScript
4.3.
Handling Property Conflicts:
4.4.
JavaScript
4.5.
Transforming Assigned Values:
4.6.
JavaScript
4.7.
Merging Objects with Priority:
4.8.
JavaScript
5.
Frequently Asked Questions
5.1.
How does _.assignInWith() differ from _.assignWith()?
5.2.
What happens if the customizer returns undefined?
5.3.
Is it safe to mutate the target object in the customizer function?
6.
Conclusion
Last Updated: Mar 27, 2024
Easy

Lodash _.assignInWith() Method

Author Gaurav Gandhi
0 upvote
Career growth poll
Do you think IIT Guwahati certified course can help you in your career?

Introduction

Lodash's _.assignInWith() method is a variation of the _.assignIn() method, which merges properties from source objects into a target object, including inherited properties. What sets _.assignInWith() apart is its ability to accept a customizer function that determines how assigned values are merged. 

Lodash _.assignInWith() Method

This method is particularly useful in situations where you need more control over how properties are combined or overridden during the assignment process.

Why This Function is Used

The _.assignInWith() function is used when you need to assign properties from one or more source objects to a target object, including inherited properties, but with a custom rule for how these properties are assigned. This method is essential in complex scenarios where the default behavior of property assignment needs to be customized, such as handling conflicts between properties or transforming values during assignment.

Syntax, Parameter and Return Value

Syntax: 

_.assignInWith(target, ...sources, customizer)

Parameters:

  • target (Object): The destination object.
     
  • ...sources (Object): The source objects.
     
  • customizer (Function): The function used to customize assigned values.

Return Value: 

(Object) - Returns the modified target object.

Examples 

Customizing Property Assignment:

  • JavaScript

JavaScript

var _ = require('lodash');

function customizer(objValue, srcValue) {

 if (_.isArray(objValue)) {

   return objValue.concat(srcValue);

 }

}



var object = { 'a': [1], 'b': [2] };

var other = { 'a': [3], 'b': [4] };

_.assignInWith(object, other, customizer);

console.log(object);
You can also try this code with Online Javascript Compiler
Run Code

Output: 

{ 'a': [1, 3], 'b': [2, 4] }


Demonstrates using a customizer function to concatenate array values from source objects.

Handling Property Conflicts:

  • JavaScript

JavaScript

var target = { 'prop1': 'value1' };

var source = { 'prop1': 'value2', 'prop2': 'value3' };

_.assignInWith(target, source, (objVal, srcVal) => {

 return objVal ? objVal : srcVal;

});

console.log(target);
You can also try this code with Online Javascript Compiler
Run Code

Output: 

{ 'prop1': 'value1', 'prop2': 'value3' }


Shows how to handle property conflicts by preferring the target object's value.

Transforming Assigned Values:

  • JavaScript

JavaScript

var target = { 'x': 10, 'y': 20 };

var source = { 'x': 5, 'z': 15 };

_.assignInWith(target, source, (objVal, srcVal) => {

 return objVal * srcVal;

});

console.log(target);
You can also try this code with Online Javascript Compiler
Run Code

 Output: 

{ 'x': 50, 'y': 20, 'z': 15 }


An example of transforming values during assignment by multiplying them.

Merging Objects with Priority:

  • JavaScript

JavaScript

var base = { 'name': 'John', 'age': 30 };

var changes = { 'name': 'Jane', 'age': 25 };

_.assignInWith(base, changes, (baseVal, changeVal) => baseVal);

console.log(base);
You can also try this code with Online Javascript Compiler
Run Code

Output:

{ 'name': 'John', 'age': 30 }


Demonstrates prioritizing the base object's properties over changes.

Frequently Asked Questions

How does _.assignInWith() differ from _.assignWith()?

_.assignInWith() includes inherited properties in the assignment, while _.assignWith() only considers the object's own properties.

What happens if the customizer returns undefined?

If the customizer function returns undefined, property assignments are handled by the method's default behavior.

Is it safe to mutate the target object in the customizer function?

While you can mutate the target object, it's generally advisable to avoid side effects in the customizer to maintain predictable behavior.

Conclusion

Lodash's _.assignInWith() method offers an advanced way to merge properties from source objects into a target object, with the added flexibility of a customizer function. It's particularly valuable in complex object manipulation scenarios where control over how properties are merged or overridden is required.

You can refer to our guided paths on the Coding Ninjas. You can check our course to learn more about DSADBMSCompetitive ProgrammingPythonJavaJavaScript, etc. 

Also, check out some of the Guided Paths on topics such as Data Structure and AlgorithmsCompetitive ProgrammingOperating SystemsComputer Networks, DBMSSystem Design, etc., as well as some Contests, Test Series, and Interview Experiences curated by top Industry Experts.

Live masterclass