The difference between Rest and spread operator in JavaScript
The Rest and Spread operator are two features of JavaScript introduced in ES6. They work entirely different but their similar syntax (triple dots ...) brings some misconceptions when working with them.
In this Blog, we will learn the difference between rest
and spread
operator in JavaScript.
๐๐ Important key points to remember:-
- The
rest
operator, is used to group remaining arguments in, usually in functions. - The
spread
operator, on the other hand, is used to split a group of values in JavaScript. - Key takeaway:
rest
groups, spreadsplits
.
Now in detail,
๐ The Rest Operator
This operator is used to get all or remaining arguments in a function as an array.
Rest Operator(...) help us to pass an infinite number of function arguments.
For example:-
const sum = (num1, num2, ...restnumber) => {
console.log(num1);//num1-> 1
console.log(num2);//num2->2
console.log(restnumber);//restnumber-> [ 3, 4, 5 ]
};
sum(1, 2, 3, 4, 5);
Output:-
Explanation:-
Line1:-The sum function accepts three arguments
num1
,num2
andrestnumber
.where the first two arguments values are1
,2
everything we passed after is represented as an array[3,4,5]
.Line 2: We will print the received arguments.
Line 3: We will make a function call.
Note: The syntax for spread and rest is the same (
...
), but use-cases differ.
Let's understand this with another example
const sum = (num1, num2, ...restnumber) => {
console.log(num1);//num1-> 1
console.log(num2);//num2->2
console.log(restnumber);//restnumber-> [ 3, 4, 5 ]
let sumOfRestNumber =
restnumber.length === 0
? 0
: restnumber.reduce((fist, last) => fist + last);
return sumOfRestNumber;
};
console.log(sum(1, 2, 3, 4, 5));//sum-> 12
Output:-
Explanation:-
Line1:-The sum function accepts three arguments
num1
,num2
andrestnumber
.where the first two arguments values are1
,2
everything we passed after is represented as an array[3,4,5]
.Line 2: We will print the received arguments.
Line 3:-After that we used ternary operator for check the
restnumber
length if it is0
we assignsumOfRestNumber
is equal to0
or length is not equal to0
we find sum of array element with the help ofarray.reduce
and assign result tosumOfRestNumber
.Line 4: We will make a function call and print the output.
Note:-Hence, the name rest, i.e., โthe rest of the elementsโ.
const sum = (num1, num2, ...restnumber) => {
console.log(num1);//num1-> 1
console.log(num2);//num1-> 2
console.log(restnumber);//restnumber-> [ 3, 4, 5 ]
let sumOfRestNumber =
restnumber.length === 0
? 0
: restnumber.reduce((fist, last) => fist + last);
console.log(sumOfRestNumber);//sumOfRestNumber->12
let sumOfTotalNumber = sumOfRestNumber + num1 + num2;
return sumOfTotalNumber;
};
console.log(sum(1, 2, 3, 4, 5));//sum->15
Output:-
๐The Spread Operator
This operator is used to split
a group of values. The group could be a string
, array
, or object
.
For strings
and arrays
, the result of the spread operator is an array because they are iterable based on their index nature. By index nature
Let understand this with Example
const str = "Richa";
const arr = ["Richa"];
console.log(str[0]);//str->R
console.log(arr[0]);//arr->Richa
For objects
, the result of the spread operator is an object because objects are based on their key-value
nature.
Output:-
๐ฉโ๐ป Uses
The spread operator can be used in four contexts. They are:
- String expressions
- Array expressions
- Function expressions
- Object expressions
Splitting the strings
let myname = "RichaSingh";
let arrayOfStrings = [...myname];
console.log(arrayOfStrings);//arrayOfString->[ 'R', 'i', 'c', 'h', 'a', 'S', 'i', 'n', 'g', 'h']
Output:-
Explanation:-
- Line 1: We will initiate the
myname
string . - Line 2: We create a new array
arrayOfStrings
using the spread operator.we are using ... spread operator to split the single string into an array of strings.
- Line 3: We will print the new arrays to the console.
Merging arrays
const group_one = [1, 2, 3];
const group_two = [4, 5, 6];
const allGroups = [...group_one, ...group_two];
console.log(allGroups);//allGroups->[ 1, 2, 3, 4, 5, 6 ]
Output:-
Explanation:-
- Line 1,2: We will initiate the
group_one
,group_two
array. - Line 3: We create a new array
allGroups
using the spread operator,we combinedgroup_one
andgroup_two
by using the spread operator - Line 4: We will print the
allGroups
to the console.
It is interesting let's explore more๐คฉ
Using Spread operator in Function calls
const multiply = (a, b, c) => {
return (a * b) / 2;
};
const nums = [5, 6, 2];
//function calling
console.log(multiply(...nums));//multiply->15
Output:-
Explanation:-
Line:-You'd observe that we didn't place the
nums
in anarray
when using it as anargument
. What the above does is to spread the values for multiply. It translates to multiply(5,6,2).Line:2:-In return we multiply the value
a
b
and div them with2
Line 3: We will print the
multiply
to the console.
Merging Objects
const obj_one = {
a: 1,
b: 2,
};
const obj_two = {
c: "Richa",
d: "Singh",
};
const merge = { ...obj_one, ...obj_two };
console.log(merge); // merge->15{a:1, b:2, c:3, d:4}
Output:-
Explanation:-
- Line 1-2: We will initiate
obj_one
obj_two
the object. - Line 3: We create a new object
merge
using the spread operator. - Line4:We will print the output.
๐ธSummary
- If you see (โฆ) dots on the function call then it is a spread operator.
- If you see (โฆ) dots on the function parameter then it is a rest parameter.
- Spread operator helps us to merge Arrays or Objects.
Wrap up
rest
and spread
are two special features that make development easier. They also have cool benefits when using array and object destructuring.
Thanks for reading ๐.Please share it with your network. Donโt forget to leave your comments below.
Subscribe to my newsletter
Read articles from Richa directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Richa
Richa
Hello Coders!! ๐ I'm Richa, and I'm passionate about web development. ๐๐งฟ Join me on this exciting journey if you're eager to learn! Remember, "If you want to excel in any field, ask questions about things you're not clear about." ๐ Let's grow together!