How can I clone a JavaScript object except for one key?
To clone a JavaScript object and exclude a certain key, destructuring assignment is your best friend:
clonedObject
contains all properties from originalObject
except keyToRemove
.
Deeper diving into cloning and key exclusion
Not all object cloning scenarios are created equal. Let's explore a few patterns based on usage requirements.
Excluding a dynamic key
If the key to exclude isn't a constant, a small adjustment let's us exclude a dynamic key:
Advanced cloning: Nested objects
For more complex nested objects, consider a utility function like deepOmit
:
Resorting to Libraries
When fancy ECMAScript (es6/es7) syntax isn't an option, Lodash or Ramda omit
you right out of this mess:
Keep an eye out for library overuse though, as the saying goes, "size
matters", bundle size that is.
Exploring the broader cloning landscape
Performance tuning: Larger objects
For gigantic objects or performance-intensive applications, the traditional Object.assign()
may be more performance-friendly:
The curious case of Undefined vs. Delete
Did you know setting a property to undefined
does not entirely exorcise the key?
Little gotchas like these can get you when using Object.keys()
or other key enumeration functions.
Addressing edge cases
- Non-enumerable properties, they're like the ninjas of JavaScript object properties. Cloning them requires fancier tricks like
Object.getOwnPropertyNames
. - Symbol properties, these wily critters aren't copied with
Object.assign()
. You might have to wrangle them separately.
Was this article helpful?