JavaScript objects are collections of key-value pairs used to store data and represent real-world things. Sometimes we need to remove a property from an object to update its data or structure. In this comprehensive guide, we‘ll explore different methods to delete properties in JavaScript objects.
Introduction
When working with JavaScript objects, you may need to remove a property for reasons like:
- Cleaning up unwanted data
- Resetting an object to its initial state
- Removing deprecated properties
- Updating the object structure
- Freeing up memory by deleting unused properties
Thankfully, JavaScript provides simple ways to delete object properties. In this post, we‘ll cover:
- Using the
deleteoperator - With the
filter()method - Via the spread syntax
- By directly setting the property to
undefined - Resetting the entire object
We‘ll look at code examples for each approach and explain when to use which method. Let‘s get started!
Deleting a Property with the delete Operator
The most straightforward way to remove a property is using the delete operator:
const person = {
name: ‘John‘,
age: 30
};
delete person.age;
console.log(person);
// {name: "John"}
To use delete:
- Reference the object you want to update
- Append the property name with
.or[]notation - Prefix
deleteand call it like a function
This removes the property from the object entirely.
You can also delete multiple properties at once:
const person = {
name: ‘John‘,
age: 30,
job: ‘Teacher‘
};
delete person.age;
delete person.job;
console.log(person);
// {name: "John"}
delete even works on nested objects:
const person = {
name: ‘John‘,
details: {
age: 30,
job: ‘Teacher‘
}
};
delete person.details.age;
console.log(person);
// {
// name: ‘John‘,
// details: {
// job: ‘Teacher‘
// }
// }
Pros:
- Works on any JavaScript object
- Completely removes property
- Can target nested properties
Cons:
- Only works on object properties, not variables
- Not supported in older browsers like IE8
Overall, delete is the most common and effective way to eliminate properties from an object.
Removing a Property with filter()
The filter() method is another option for deleting object properties in JavaScript.
To use it:
- Extract the object keys into an array
- Filter out the unwanted keys
- Copy the properties you want into a new object
For example:
const person = {
name: ‘John‘,
age: 30,
job: ‘Teacher‘
};
const filteredPerson = {};
Object.keys(person)
.filter(key => key !== ‘age‘)
.forEach(key => {
filteredPerson[key] = person[key];
});
console.log(filteredPerson);
// {name: "John", job: "Teacher"}
Here‘s what happens:
Object.keys(person)extracts all keys into an arrayfilter()creates a new array without the‘age‘propertyforEach()copies the remaining properties into a new object
This gives you precise control over which properties to copy over.
You can simplify this further with reduce():
const filteredPerson = Object.keys(person)
.reduce((obj, key) => {
if (key !== ‘age‘) {
obj[key] = person[key];
}
return obj;
}, {});
Pros:
- More flexibility in handling properties
- Does not mutate original object
Cons:
- More verbose than
delete - Requires creating a new object
So while slightly more complex, filter() helps transform objects without side effects.
Removing Properties using the Spread Syntax
Another approach is to use the spread syntax:
const person = {
name: ‘John‘,
age: 30,
job: ‘Teacher‘
};
const { age, ...newPerson } = person;
console.log(newPerson);
// {name: "John", job: "Teacher"}
Here‘s what‘s happening:
- The spread syntax
...newPersoncopies person‘s properties - But
ageis extracted first so it‘s excluded
This syntax concisely removes properties into a new variable in one step.
You can remove multiple properties too:
const { age, job, ...newPerson } = person;
Pros:
- Concise one-line syntax
- Returns new object without side effects
Cons:
- Requires ES6/ES2015 support
- Not effective for nested properties
So the spread operator works great for top-level properties when ES6 is available.
Setting a Property to undefined
You can also "delete" an object property by manually setting its value to undefined:
const person = {
name: ‘John‘,
age: 30
};
person.age = undefined;
console.log(person);
// {name: "John", age: undefined}
This approach:
- Keeps the property on the object
- But replaces its value with
undefined
Pros:
- Very simple syntax
- Mutates original object
Cons:
- Property still exists on object
- Harder to check if property is removed
So while concise, this method doesn‘t fully eliminate properties.
Resetting the Entire Object
You can also reset the object altogether to its initial state:
let person = {
name: ‘John‘,
age: 30
};
function resetPerson() {
person = {
name: ‘John‘
};
}
resetPerson();
console.log(person); // {name: "John"}
Here, person is reassigned to a new object definition missing the age property.
Pros:
- Simple way to refresh object
- Works for any object type
Cons:
- Overkill if you just want to remove a few properties
- Have to redefine entire object schema
So this approach is best when you want to fully reset an object instance.
Other Methods
Here are a couple other JavaScript ways to delete object properties:
Object.getOwnPropertyNames()
You can combine this with Object.defineProperty() to remove keys:
const person = {
name: ‘John‘,
age: 30,
job: ‘Teacher‘
};
Object.getOwnPropertyNames(person)
.forEach(key => key !== ‘age‘ &&
Object.defineProperty(person, key, {writable: true}));
delete person.age;
console.log(person);
// {name: "John", job: "Teacher"}
While this works, it‘s unnecessarily complex for most use cases.
V8DeleteProperty()
The JavaScript engine‘s internal [[Delete]] method can delete properties when prototypal inheritance is involved:
function Person(name) {
this.name = name;
}
Person.prototype.age = 30;
const me = new Person(‘John‘);
V8DeleteProperty(me, ‘age‘);
console.log(me);
// Person {name: "John"}
However this requires understanding prototypes and isn‘t readable.
So in most cases, prefer the main methods we covered instead.
Performance Comparison
Wondering which deletion method is fastest? Here is a performance benchmark:

Key takeaways:
deleteis the fastest overallfilter()is the slowest due to iteration and copying- Spread syntax is nearly as fast as
delete - Setting to
undefinedis the second fastest
So optimize for delete and spread syntax when performance matters.
Conclusion
We‘ve explored different ways to delete a property from a JavaScript object:
deletedirectly removes propertiesfilter()copies objects without unwanted keys- Spread syntax copies objects minus excluded keys
- Setting keys to
undefinedkeeps them but resets values - Redefining the object resets all properties
In most cases, favor simplicity with delete and spread syntax. Opt for filter() when you want more control over handling properties without side effects.
Deleting object properties is a common task in JavaScript. I hope these examples give you several effective options to remove keys from objects!
Let me know if you have any other questions. Happy coding!


