set-value

Create nested values and any intermediaries using dot notation (
'a.b.c'
) paths.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
Install
Install with npm:
$ npm install --save set-value
Heads up!
Please update to version 3.0.1 or later, a critical bug was fixed in that version.
Usage
const set = require('set-value');
set(object, prop, value);
Params
object
{object}: The object to setvalue
onprop
{string}: The property to set. Dot-notation may be used.value
{any}: The value to set onobject[prop]
Examples
Updates and returns the given object:
const obj = {};
set(obj, 'a.b.c', 'd');
console.log(obj);
//=> { a: { b: { c: 'd' } } }
Escaping
Escaping with backslashes
Prevent set-value from splitting on a dot by prefixing it with backslashes:
console.log(set({}, 'a\\.b.c', 'd'));
//=> { 'a.b': { c: 'd' } }
console.log(set({}, 'a\\.b\\.c', 'd'));
//=> { 'a.b.c': 'd' }
Benchmarks
(benchmarks were run on a MacBook Pro 2.5 GHz Intel Core i7, 16 GB 1600 MHz DDR3).
set-value is more reliable and has more features than dot-prop, without sacrificing performance.
# deep (194 bytes)
deep-object x 629,744 ops/sec ±0.85% (88 runs sampled)
deep-property x 1,470,427 ops/sec ±0.94% (89 runs sampled)
deep-set x 1,401,089 ops/sec ±1.02% (91 runs sampled)
deephas x 590,005 ops/sec ±1.73% (86 runs sampled)
dot-prop x 1,261,408 ops/sec ±0.94% (90 runs sampled)
dot2val x 1,672,729 ops/sec ±1.12% (89 runs sampled)
es5-dot-prop x 1,313,018 ops/sec ±0.79% (91 runs sampled)
lodash-set x 1,074,464 ops/sec ±0.97% (93 runs sampled)
object-path-set x 961,198 ops/sec ±2.07% (74 runs sampled)
object-set x 258,438 ops/sec ±0.69% (90 runs sampled)
set-value x 1,976,843 ops/sec ±2.07% (89 runs sampled)
fastest is set-value (by 186% avg)
# medium (98 bytes)
deep-object x 3,249,287 ops/sec ±1.04% (93 runs sampled)
deep-property x 3,409,307 ops/sec ±1.28% (88 runs sampled)
deep-set x 3,240,776 ops/sec ±1.13% (93 runs sampled)
deephas x 960,504 ops/sec ±1.39% (89 runs sampled)
dot-prop x 2,776,388 ops/sec ±0.80% (94 runs sampled)
dot2val x 3,889,791 ops/sec ±1.28% (91 runs sampled)
es5-dot-prop x 2,779,604 ops/sec ±1.32% (91 runs sampled)
lodash-set x 2,791,304 ops/sec ±0.75% (90 runs sampled)
object-path-set x 2,462,084 ops/sec ±1.51% (91 runs sampled)
object-set x 838,569 ops/sec ±0.87% (90 runs sampled)
set-value x 4,767,287 ops/sec ±1.21% (91 runs sampled)
fastest is set-value (by 181% avg)
# shallow (101 bytes)
deep-object x 4,793,168 ops/sec ±0.75% (88 runs sampled)
deep-property x 4,669,218 ops/sec ±1.17% (90 runs sampled)
deep-set x 4,648,247 ops/sec ±0.73% (91 runs sampled)
deephas x 1,246,414 ops/sec ±1.67% (92 runs sampled)
dot-prop x 3,913,694 ops/sec ±1.23% (89 runs sampled)
dot2val x 5,428,829 ops/sec ±0.76% (92 runs sampled)
es5-dot-prop x 3,897,931 ops/sec ±1.19% (92 runs sampled)
lodash-set x 6,128,638 ops/sec ±0.95% (87 runs sampled)
object-path-set x 5,429,978 ops/sec ±3.31% (87 runs sampled)
object-set x 1,529,485 ops/sec ±2.37% (89 runs sampled)
set-value x 7,150,921 ops/sec ±1.58% (89 runs sampled)
fastest is set-value (by 172% avg)
Running the benchmarks
Clone this library into a local directory:
$ git clone https://github.com/jonschlinkert/set-value.git
Then install devDependencies and run benchmarks:
$ npm install && node benchmark
Comparisons to other libs, or "the list of shame"
These are just a few of the duplicate libraries on NPM.
- bury fails all of the tests. I even wrapped it to have it return the object instead of the value, but with all of that work it still fails the vast majority of tests.
- deep-get-set fails 22 of 26 unit tests.
- deep-object fails 25 of 26 unit tests, completely butchered given objects.
- deep-property fails 17 of 26 unit tests.
- deep-set fails 13 of 26 unit tests.
- deephas fails 17 of 26 unit tests.
- dot-prop fails 9 of 26 unit tests.
- dot2val fails 17 of 26 unit tests.
- es5-dot-prop fails 15 of 26 unit tests.
- getsetdeep fails all unit tests due to
this
being used improperly in the methods. I was able to patch it by binding the (plain) object to the methods, but it still fails 17 of 26 unit tests. - lodash.set fails 11 of 26 unit tests.
- object-path-set fails 12 of 26 unit tests.
- object-path fails 16 of 26 unit tests.
- object-set fails 13 of 26 unit tests.
- set-nested-prop fails 24 of 26 unit tests.
- setvalue (this library is almost identical to a previous version of this library)
- Many dozens of others
Others that do the same thing, but use a completely different API
- deep-set-in
- set-deep
- set-deep-prop
- bury
- Many dozens of others
History
v3.0.0
- Added support for a custom
split
function to be passed on the options. - Removed support for splitting on brackets, since a custom function can be passed to do this now.
v2.0.0
- Adds support for escaping with double or single quotes. See escaping for examples.
- Will no longer split inside brackets or braces. See bracket support for examples.
If there are any regressions please create a bug report. Thanks!
About
sh
$ npm install && npm test
sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
Related projects
You might also be interested in these projects:
- assign-value: Assign a value or extend a deeply nested property of an object using object path… more | homepage
- get-value: Use property paths like 'a.b.c' to get a nested value from an object. Even works… more | homepage
- has-value: Returns true if a value exists, false if empty. Works with deeply nested values using… more | homepage
- merge-value: Similar to assign-value but deeply merges object values or nested values using object path/dot notation. | homepage
- omit-value: Omit properties from an object or deeply nested property of an object using object path… more | homepage
- set-value: Set nested properties on an object using dot notation. | homepage
- union-value: Set an array of unique values as the property of an object. Supports setting deeply… more | homepage
- unset-value: Delete nested properties from an object using dot notation. | homepage
Contributors
Commits | Contributor |
---|---|
90 | jonschlinkert |
4 | doowb |
2 | mbelsky |
1 | dkebler |
1 | GlennKintscher |
1 | petermorlion |
1 | abetomo |
1 | zeidoo |
1 | ready-research |
1 | wtgtybhertgeghgtwtg |
Author
Jon Schlinkert
License
Copyright © 2022, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.8.0, on August 16, 2022.