Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.
npm install 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 with npm:
``sh`
$ npm install --save set-value
Please update to version 3.0.1 or later, a critical bug was fixed in that version.
`js`
const set = require('set-value');
set(object, prop, value);
* object {object}: The object to set value onprop
* {string}: The property to set. Dot-notation may be used.value
* {any}: The value to set on object[prop]
Updates and returns the given object:
`js`
const obj = {};
set(obj, 'a.b.c', 'd');
console.log(obj);
//=> { a: { b: { c: 'd' } } }
Escaping with backslashes
Prevent set-value from splitting on a dot by prefixing it with backslashes:
`js
console.log(set({}, 'a\\.b.c', 'd'));
//=> { 'a.b': { c: 'd' } }
console.log(set({}, 'a\\.b\\.c', 'd'));
//=> { 'a.b.c': 'd' }
`
_(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)
fastest is set-value (by 181% avg)
fastest is set-value (by 172% avg)
`
Clone this library into a local directory:
`sh`
$ git clone https://github.com/jonschlinkert/set-value.git
Then install devDependencies and run benchmarks:
`sh`
$ npm install && node benchmark
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
* 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.
* 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!
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
`sh`
$ npm install && npm test
Building docs
_(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)_
To generate the readme, run the following command:
`sh``
$ npm install -g verbose/verb#dev verb-generate-readme && verb
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
| Commits | Contributor |
| --- | --- |
| 90 | jonschlinkert |
| 4 | doowb |
| 2 | mbelsky |
| 1 | dkebler |
| 1 | GlennKintscher |
| 1 | petermorlion |
| 1 | abetomo |
| 1 | zeidoo |
| 1 | ready-research |
| 1 | wtgtybhertgeghgtwtg |
Jon Schlinkert
* GitHub Profile
* Twitter Profile
* LinkedIn Profile
Copyright © 2022, Jon Schlinkert.
Released under the MIT License.
*
_This file was generated by verb-generate-readme, v0.8.0, on August 16, 2022._