clean-set
Quickly update a value in a deeply nested object and clone each node touched for simple change tracking
===
.
Check out dset if you just want to do an in place mutation on a deeply nested value.
Install
npm i clean-set
Includes builds for commonjs, umd, and esm and is less than 200b 182b gzip (thanks to @lukeed)
Usage
let current = a: b: c: true d: e: f: g: 'hello' h: i: 0 ; let next = ; /** * Alternatively you can provide a function for the final parameter to * receive the current value of that node. * * let next = cleanSet(current, 'e.h.i', i => i + 1); */ // The value is assignedconsole; // true // Each parent node touched is a new referenceconsole; // trueconsole; // trueconsole; // true // Untouched references remain the sameconsole; // trueconsole; // trueconsole; // trueconsole; // true
Here's what an object spread equivalent would look like.
let next = ...current e: ...currente h: ...currenteh i: 1 ;
Benchmarks
Check out the es bench link to run the benchmarks yourself.
Note: YMMV canary and firefox dev have some impressive improvements for object assign and object spread respectively.
Chrome 67