1. javascript
  2. /es6
  3. /destructuring

A Guide to JavaScript Destructuring

At one point, carrying data in JavaScript from one place to another was a more cumbersome process, especially in complex data structures.

Sounds tedious, right?

That's exactly how it was before ES6 in the JavaScript world.

Destructuring Explained

As an ES6 feature, destructuring is a convenient way of unpacking values. It enables us to bind values to specific variables, making it easier to access and manipulate data stored within arrays or objects.

In simpler terms, it's like making a copy of the values from the data structure and storing them in new variables that can be used independently.

But, to understand the new, let's take a look at the old way of doing things.

The Old Ways

Suppose you want to extract values from an array and assign them to variables. Before ES6, you would have to do it like this:

let arr = [1, 2, 3];
let first = arr[0];
let second = arr[1];
let third = arr[2];
console.log(first, second, third); // 1 2 3

As you can see, it's not only repetitive but also prone to errors when dealing with larger arrays.

The New Way with Destructuring

With destructuring, you can extract values from arrays and assign them to variables more elegantly. Here's how we can do that:

let arr = [1, 2, 3];
let [first, second, third] = arr;
console.log(first, second, third); // 1 2 3

As you can see, the new way is much more concise and less prone to errors.

Array Destructure

Destructuring makes working with arrays and objects much more flexible and less verbose. Unpacking arrays for smaller data structures is usually straightforward. The basic syntax involves enclosing the values we want to extract in square brackets [], like so:

let arr = [1, 2, 3];
let [a, b, c] = arr;

console.log(a); // 1
console.log(b); // 2
console.log(c); // 3

Now, let's take a closer look.

We have an array named arr with three values. We then use destructuring to extract the values of arr and assign them to the variables a, b, and c.

Destructuring Objects

When we want to unpack objects we simply enclose the properties that need extracting in curly braces {}.

Here's a basic example:

let obj = {
  name: "Mike",
  age: 28
};

let { name, age } = obj;

console.log(name); // "Mike"
console.log(age); // 28

In obj, we have two properties, name and age. We then use destructuring to extract the values of these properties and assign them to variables name and age.

What About the Rest?

The rest operator gives us the option of extracting the rest of the values in an array or object and assigning them to a new variable. It's denoted by three dots (...), and we can use it in conjunction with destructuring to extract values that we may not need immediately.

let arr = [1, 2, 3, 4, 5];

let [a, b, ...rest] = arr;

console.log(a); // 1
console.log(b); // 2
console.log(rest); // [3, 4, 5]

Here, we insert the rest operator (...) to extract the remaining values of arr and assign them to a new array called rest.

We can do the same when destructuring objects:

let obj = {
  name: "Bean",
  age: 35,
  city: "London"
};

let { name, age, ...rest } = obj;

console.log(name); // "John"
console.log(age); // 32
console.log(rest); // { city: "London" }

Destructuring in Functions

We can also put destructuring to use in function parameters, making it less challenging to access and manage the data that's passed to a function.

For the sake of clarity, let's look at a basic example of this use case:

function greet({ name, age }) {
  console.log(`Hello, my name is ${name} and I'm ${age} years old.`);
}

greet({ name: "John", age: 32 }); // "Hello, my name is John and I'm 32 years old."

As we can see, destructuring in the function parameters extracts the values of name and age from the object that's passed to the function.

Playing with Values

Destructuring allows you to do more than just assign values to variables, you can also swap values and skip values.

Swapping Values

With destructuring, you can swap the values of two variables in a single line of code, without the need for a temporary variable. Here's an example:

let a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 2, 1

Skipping Values

You can skip values during destructuring by using comma separators:

let [, b, c] = [1, 2, 3];
console.log(b, c); // 2, 3

Final Thoughts

Destructuring is a great feature of ES6, that makes working with complex data structures in JavaScript much more flexible.

In web applications, destructuring can be used to extract values from APIs, user input, and a variety of other use cases. Of course, as one progresses in the language, it's inevitable to come across more challenging problems that might make destructuring messier. But, if we take the nature of programming into account, this shouldn't be a reason for discouragement.

Useful Resources

Check out some other neat destructuring examples, and feel free to browse more snippets that you might find useful.