DEV Community

Cover image for Level Up Your JavaScript Skills with the Spread Operator
Amrasakpare Lawrence
Amrasakpare Lawrence

Posted on

Level Up Your JavaScript Skills with the Spread Operator

Hey guys, If you're just beginning your journey in web development and have started exploring the world of JavaScript, you might have encountered the term 'spread operator' and wondered about its meaning and practicality. Don't worry! This article aims to unravel the mysteries surrounding the spread operator, providing a beginner-friendly explanation of its concept and various applications. So, let's dive right in ๐Ÿ˜‰

What is the Spread Operator?

The Spread operator is basically a new feature in JavaScript that can be used to conveniently manipulate arrays and objects. It is denoted by the ellipsis or dots (...). It allows you to spread the elements of an iterable (like an array or a string) into individual elements. You can think of it as unpacking the contents of an array or an object. Letโ€™s take a basic example to see it in action ๐Ÿ‘‡๐Ÿฝ

const even = [2, 4, 6];
const combined = [1, 3, 5, ...even];
console.log(combined); // [1, 3, 5, 2, 4, 6]
Enter fullscreen mode Exit fullscreen mode

From the example above, the three dots (ย ...) located in front of theย evenย array is the spread operator. The spread operator (...) unpacks the elements of theย evenย array.

๐Ÿ’ก It's completely alright if the example we just discussed isn't clear to you. We will delve into a detailed explanation very soon.

Use Cases of the Spread Operator

Let's explore each use case in detail with clear examples

  1. Copying an Array

    The spread operator can be used to create a shallow copy of an array. Here's an example ๐Ÿ‘‡๐Ÿฝ

    const originalArray = [1, 2, 3];
    const copiedArray = [...originalArray];
    
    console.log(copiedArray); // Output: [1, 2, 3]
    

    In this example, we use the spread operator ([...originalArray]) to create a new array called copiedArray with the same elements as originalArray. And also that modifying the copiedArray will not affect the originalArray. And this comes in handy when you are building a to-do list app.

  2. Concatenating Arrays

    You can concatenate multiple arrays using the spread operator. Here's an example ๐Ÿ‘‡๐Ÿฝ

    const array1 = [1, 2, 3];
    const array2 = [4, 5, 6];
    const concatenatedArray = [...array1, ...array2];
    
    console.log(concatenatedArray); // Output: [1, 2, 3, 4, 5, 6]
    

    In this example, we create two arrays, array1 and array2. By using the spread operator ([...array1, ...array2]), we create a new array called concatenatedArray that contains all the elements from both array1 and array2.

  3. Adding Elements to an Array

    The spread operator can also be used to add elements to an existing array. Here's an example ๐Ÿ‘‡๐Ÿฝ

    const originalArray = [1, 2, 3];
    const newArray = [...originalArray, 4, 5];
    
    console.log(newArray); // Output: [1, 2, 3, 4, 5]
    

    In this example, we use the spread operator ([...originalArray, 4, 5]) to spread the elements of originalArray into a new array called newArray. We then add the elements 4 and 5 to the end of the newArray. You will also observe that this example is similar to the first example we saw in this article.

  4. Spreading an Array into Function Arguments

    The spread operator is also useful for passing an array as individual arguments to a function. Here's an example ๐Ÿ‘‡๐Ÿฝ

    const numbers = [1, 2, 3, 4, 5];
    const sum = (a, b, c, d, e) => a + b + c + d + e;
    
    const result = sum(...numbers);
    console.log(result); // Output: 15
    

    In this example, we have an array called numbers containing five elements. By using the spread operator (sum(...numbers)), we pass each element of the array as an individual argument to the sum function, resulting in the sum of all the numbers.

  5. Copying an Object

    Aside from creating a shallow copy with an array, the spread operator can also be used to create a shallow copy of an object. Here's an example ๐Ÿ‘‡๐Ÿฝ

    const originalObject = { name: "John", age: 30 };
    const copiedObject = { ...originalObject };
    
    console.log(copiedObject); // Output: { name: "John", age: 30 }
    

    In this example, we use the spread operator ({ ...originalObject }) to create a new object called copiedObject with the same properties as originalObject. Modifying copiedObject will not affect the originalObject

  6. Merging Objects

    The spread operator allows you to merge the properties of multiple objects into a new object. Here's an example ๐Ÿ‘‡๐Ÿฝ

    const object1 = { name: "John" };
    const object2 = { age: 30 };
    const mergedObject = { ...object1, ...object2 };
    
    console.log(mergedObject); // Output: { name: "John", age: 30 }
    

    In this example, we have two objects, object1 and object2. By using the spread operator ({ ...object1, ...object2 }), we create a new object called mergedObject that contains all the properties of both object1 and object2.

  7. Adding Properties to an Object

    The spread operator can also be used to add new properties to an existing object. Here's an example

    const originalObject = { name: "John" };
    const newObject = { ...originalObject, age: 30 };
    
    console.log(newObject); // Output: { name: "John", age: 30 }
    

    In this example, we use the spread operator ({ ...originalObject, age: 30 }) to spread the properties of originalObject into a new object called newObject. We then add a new property, age to the newObject.

    Before we go on to the next part of the article I really hope these examples help clarify the usage of the spread operator for each scenario. I would also suggest that you go through each use case very well and even try to experiment with them to get a deeper understanding.

Real-World Use Case

I know weโ€™ve already talked about the use cases of the spread operator. But to be honest I like writing articles where I can show a practical use case on where a JavaScript concept can be applied.

๐Ÿ’ก Do not get me wrong, Theories (like the use cases) are very crucial when learning anything.

Letโ€™s take some Exercises ๐Ÿ‘‡๐Ÿฝ

Exercise 1: Create a copy of an array and add new elements

Let's say you have an array of tasks representing a to-do list, and you want to create a copy of the array and add a new task to it. The spread operator can be used to accomplish this task efficiently. Here is how you would do it ๐Ÿ‘‡๐Ÿฝ

const toDoList = ['Task 1', 'Task 2', 'Task 3'];

// Creating a copy of the array using the spread operator
const updatedToDoList = [...toDoList];

// Adding a new task to the copied array
updatedToDoList.push('Task 4');

console.log(updatedToDoList);
// Output: ['Task 1', 'Task 2', 'Task 3', 'Task 4']
Enter fullscreen mode Exit fullscreen mode

In the code above, the spread operator ...toDoList is used to create a shallow copy of the toDoList array. This ensures that any modifications made to the updatedToDoList array do not affect the original toDoList array. After creating the copy, the push() method is used to add a new task, 'Task 4', to the updatedToDoList array.

This approach allows you to work with a modified version of the array while preserving the integrity of the original array. It's a common use case when dealing with arrays or objects, as it helps prevent unintended mutations and facilitates working with immutable data.

The next exercise is for you to try out on your own and you can let me know if you got it in the comment.

Exercise 2: Merging Objects

Your task is to complete the code by using the spread operator to merge two objects into a single object.

You have two objects, person1 and person2, each representing a person with different properties. Your goal is to merge these two objects into a single object, mergedPerson using the spread operator. Do not worry I will give you everything in the code apart from the solution ๐Ÿ‘‡๐Ÿฝ

const person1 = {
  name: 'Lawrence',
  age: 23,
  city: 'Nigeria'
};

const person2 = {
  occupation: 'Developer',
  hobbies: ['Drumming', 'Watching Movies']
};

// Your task is to merge person1 and person2 into a single object using the spread operator

const mergedPerson = ...

console.log(mergedPerson);
Enter fullscreen mode Exit fullscreen mode

Your task is to fill in the ... with the appropriate spread operator syntax to merge person1 and person2 into a single object, mergedPerson. After completing the code, you can check the console to see the output, which should display the merged object.

Remember, the spread operator is used to unpack properties from an object. Use this knowledge to combine the properties of person1 and person2 into the mergedPerson object.

You can also refer back to the Use Cases (Use Case 6) we talked about

Solution

Kudos to you if you got the solution ๐Ÿ˜ƒ. But if you did not, thatโ€™s fine. Letโ€™s go through it together ๐Ÿ‘‡๐Ÿฝ

To merge the person1 and person2 objects into a single object using the spread operator, you can use the following code

const person1 = {
  name: 'Lawrence',
  age: 23,
  city: 'Nigeria'
};

const person2 = {
  occupation: 'Developer',
  hobbies: ['Drumming', 'Watching Movies']
};

const mergedPerson = { ...person1, ...person2 };

console.log(mergedPerson);
Enter fullscreen mode Exit fullscreen mode

In the code above, the spread operator ... is used twice: once for person1 and once for person2. By spreading both objects inside curly braces {}, their properties are unpacked and merged into the mergedPerson object.

The resulting mergedPerson object will contain all the properties from both person1 and person2, resulting in a single merged object.

Summary

The spread operator is a powerful tool that can be used to make your JavaScript code more concise and readable. It can be used in a variety of situations, so it's a good idea to learn how to use it.

Here are some additional things to keep in mind when using the spread operator:

  • The spread operator can only be used with iterables. This means that you cannot use it with strings, numbers, or boolean values.
  • When using the spread operator to pass multiple arguments to a function, the order of the arguments is important. The first argument will be assigned to the first element of the iterable, the second argument will be assigned to the second element, and so on.
  • When using the spread operator to create a new array, the elements of the iterable will be added to the new array in the same order that they appear in the iterable.
  • When using the spread operator to destructure an array, the variables will be assigned the elements of the array in the same order that they appear in the array.
  • When using the spread operator to create a new object, the properties of the iterable will be added to the new object in the same order that they appear in the iterable.

Conclusion

Thatโ€™s all guys ๐Ÿ˜ƒ. I really hope you learned something from this article. You might not see the need to use it if you are just starting out but as you delve deeper into web development, you'll encounter more scenarios where the spread operator can come in handy. Remember, practice is key to mastering any programming concept, so don't hesitate to experiment and explore different use cases. Have an amazing weekend and see you next week ๐Ÿ˜‰

Top comments (9)

Collapse
 
volodyslav profile image
Volodyslav

Oh nice lesson, thanks! Like your exercises!

Collapse
 
devlawrence profile image
Amrasakpare Lawrence

Thanks Vlad. I really appreciate

Collapse
 
rafikadir profile image
rafikadir

Spread Operator is awesome and helpful for boosting productivity while coding.

Collapse
 
sharmi2020 profile image
Sharmila kannan

Informative, I got more explanation about spread operator in this article

Collapse
 
devlawrence profile image
Amrasakpare Lawrence

Thanks sharmi. I'm glad you enjoyed it.

Collapse
 
dali2g profile image
Mohamed Ali Mejdi

Great content !!

Collapse
 
devlawrence profile image
Amrasakpare Lawrence

Thanks Mohamed

Collapse
 
chintan-golakiya profile image
Chintan Golakiya

I got to know one more awesome thing about in Spread Operator use case "Spreading an Array into Function Arguments".

Collapse
 
devlawrence profile image
Amrasakpare Lawrence

That's great to hear Chintan