Write JavaScript like a pro. Javascript Icon

Follow the ultimate JavaScript roadmap.

Removing Object Properties with Destructuring

In this post you’ll learn how to remove properties from an object in JavaScript using destructuring and the ...rest syntax.

This new way to remove object properties (by excluding them from a new object) gives us a cleaner way to write JavaScript, with less code and better readability - as well as it being an immutable operation.

Before destructuring, we would typically use the delete keyword to remove properties from an object. The issue with delete is that it’s a mutable operation, physically changing the object and potentially causing unwanted side-effects due to the way JavaScript handles objects references.

By using object destructuring, combined with the rest operator ...rest, we have a one-liner clean approach.

What is Object destructuring?

Object destructuring allows us to create variables from object property names, and the variable will contain the value of the property name - for example:

const data = { a: 1, b: 2, c: 3 };

const { a, b, c } = data;

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

By using const { a, b, c } = data we are declaring 3 new variables (a, b and c).

If a, b and c exist as property names on data, then variables will be created containing the values of the object properties. If the property names do not exist, you’ll get undefined.

…rest in Object destructuring

First came rest parameters, then came rest properties!

Added in ECMAScript 2015 and now at Stage 4 - they’re here to stay and use today.

With this in mind, how does ...rest help us remove a property from an object via destructuring?

Angular Directives In-Depth eBook Cover

Free eBook

Directives, simple right? Wrong! On the outside they look simple, but even skilled Angular devs haven’t grasped every concept in this eBook.

  • Green Tick Icon Observables and Async Pipe
  • Green Tick Icon Identity Checking and Performance
  • Green Tick Icon Web Components <ng-template> syntax
  • Green Tick Icon <ng-container> and Observable Composition
  • Green Tick Icon Advanced Rendering Patterns
  • Green Tick Icon Setters and Getters for Styles and Class Bindings

Let’s take our earlier example and use the ...rest syntax to see what happens:

const data = { a: 1, b: 2, c: 3 };

const { a, ...rest } = data;

console.log(a); // 1
console.log(rest); // { b: 2, c: 3 }

Using ...rest here (and you can call rest anything you like) gives us everything left over, the urmm “rest” of the properties if you will.

So, haven’t we just learned how to remove a property from an object? I don’t see a: 1 inside rest - it’s been removed!

Technically, it’s been excluded rather than physically “removed” from the object - and it follows an immutable pattern for writing JavaScript and managing state (state being our data).

Here’s how we would do this without object destructuring or the rest syntax, it’s a lot more tedious and doesn’t allow us to dynamically get all remaining properties:

const data = { a: 1, b: 2, c: 3 };

const a = data.a;
const rest = { b: data.b, c: data.c };

console.log(a); // 1
console.log(rest); // { b: 2, c: 3 }

Dynamically removing a property by key

Let’s say we have a key that perhaps a user has supplied that they want to delete. For this we’ll use b. How do we remove that specific item? All examples so far have been hard coded values.

Let’s assume we have 'b' as a value somewhere, we can dynamically pass this into our destructuring syntax using square brackets syntax [removeProp], just like an object lookup (instead this creates a new variable based off the dynamically passed value):

const data = { a: 1, b: 2, c: 3 };

const removeProp = 'b';

const { [removeProp]: remove } = data;

console.log(remove); // 2

That’s right, because we’re dynamically constructing a new variable, we need to use : remove to reassign it a new name. Otherwise, how will we reference it? We can’t reference [removeProp] so we’ll need to remember this.

However, at this point we can again introduce the rest syntax to remove the property from the object:

const data = { a: 1, b: 2, c: 3 };

const removeProp = 'b';

const { [removeProp]: remove, ...rest } = data;

console.log(remove); // 2
console.log(rest); // { a: 1, c: 3 }

There you have it, we’ve successfully deleted a property dynamically in JavaScript using object destructuring and the rest syntax!

Check out the live example in StackBlitz, have a play around and get comfortable with it:

Summary

We’ve come a long way! This technique helps us avoid mutable operations and the delete keyword, giving us an immutable pattern for removing properties from objects in JavaScript.

We’ve used object destructuring and looked at how to combine it with the rest syntax to give us a clean solution to removing object properties.

🏆 Check out my JavaScript courses to fully learn the deep language basics, advanced patterns, functional and object-oriented programming paradigms and everything related to the DOM. A must-have series of courses for every serious JavaScript developer.

Happy coding!

P.S. this blog post was prompted by a neat discussion on Twitter I had with Mauricio Correa! He’s an awesome guy and developer from Brazil.

Angular Directives In-Depth eBook Cover

Free eBook

Directives, simple right? Wrong! On the outside they look simple, but even skilled Angular devs haven’t grasped every concept in this eBook.

  • Green Tick Icon Observables and Async Pipe
  • Green Tick Icon Identity Checking and Performance
  • Green Tick Icon Web Components <ng-template> syntax
  • Green Tick Icon <ng-container> and Observable Composition
  • Green Tick Icon Advanced Rendering Patterns
  • Green Tick Icon Setters and Getters for Styles and Class Bindings

Learn JavaScript the right way.

The most complete guide to learning JavaScript ever built.
Trusted by 82,951 students.

Todd Motto

with Todd Motto

Google Developer Expert icon Google Developer Expert

Related blogs 🚀

Free eBooks:

Angular Directives In-Depth eBook Cover

JavaScript Array Methods eBook Cover

NestJS Build a RESTful CRUD API eBook Cover