Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/sindresorhus/dot-prop
Get, set, or delete a property from a nested object using a dot path
https://github.com/sindresorhus/dot-prop
Last synced: 6 days ago
JSON representation
Get, set, or delete a property from a nested object using a dot path
- Host: GitHub
- URL: https://github.com/sindresorhus/dot-prop
- Owner: sindresorhus
- License: mit
- Created: 2015-01-08T05:48:39.000Z (about 10 years ago)
- Default Branch: main
- Last Pushed: 2024-05-09T20:31:37.000Z (9 months ago)
- Last Synced: 2024-10-29T13:05:41.376Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 85.9 KB
- Stars: 816
- Watchers: 14
- Forks: 69
- Open Issues: 8
-
Metadata Files:
- Readme: readme.md
- License: license
- Security: .github/security.md
Awesome Lists containing this project
- awesome - sindresorhus/dot-prop - Get, set, or delete a property from a nested object using a dot path (JavaScript)
- awesome-nodejs-cn - dot-prop - 使用 ```.``` 路径方式获取一个套嵌对象的属性 (包 / 其他)
- awesome-starred-test - sindresorhus/dot-prop - Get, set, or delete a property from a nested object using a dot path (JavaScript)
- awesome-nodejs - dot-prop - Get a property from a nested object using a dot path. (Packages / Miscellaneous)
- awesome-nodejs - dot-prop - Get, set, or delete a property from a nested object using a dot path - ★ 337 (Miscellaneous)
- awesome-node - dot-prop - Get a property from a nested object using a dot path. (Packages / Miscellaneous)
- awesome-javascript - dot-prop
- awesome-javascript - dot-prop
- awesome-nodejs-cn - dot-prop - **star:824** 使用点路径从嵌套对象中获取属性 (包 / 杂项)
README
# dot-prop
> Get, set, or delete a property from a nested object using a dot path
## Install
```sh
npm install dot-prop
```## Usage
```js
import {getProperty, setProperty, hasProperty, deleteProperty} from 'dot-prop';// Getter
getProperty({foo: {bar: 'unicorn'}}, 'foo.bar');
//=> 'unicorn'getProperty({foo: {bar: 'a'}}, 'foo.notDefined.deep');
//=> undefinedgetProperty({foo: {bar: 'a'}}, 'foo.notDefined.deep', 'default value');
//=> 'default value'getProperty({foo: {'dot.dot': 'unicorn'}}, 'foo.dot\\.dot');
//=> 'unicorn'getProperty({foo: [{bar: 'unicorn'}]}, 'foo[0].bar');
//=> 'unicorn'// Setter
const object = {foo: {bar: 'a'}};
setProperty(object, 'foo.bar', 'b');
console.log(object);
//=> {foo: {bar: 'b'}}const foo = setProperty({}, 'foo.bar', 'c');
console.log(foo);
//=> {foo: {bar: 'c'}}setProperty(object, 'foo.baz', 'x');
console.log(object);
//=> {foo: {bar: 'b', baz: 'x'}}setProperty(object, 'foo.biz[0]', 'a');
console.log(object);
//=> {foo: {bar: 'b', baz: 'x', biz: ['a']}}// Has
hasProperty({foo: {bar: 'unicorn'}}, 'foo.bar');
//=> true// Deleter
const object = {foo: {bar: 'a'}};
deleteProperty(object, 'foo.bar');
console.log(object);
//=> {foo: {}}object.foo.bar = {x: 'y', y: 'x'};
deleteProperty(object, 'foo.bar.x');
console.log(object);
//=> {foo: {bar: {y: 'x'}}}
```## API
### getProperty(object, path, defaultValue?)
Get the value of the property at the given path.
Returns the value if any.
### setProperty(object, path, value)
Set the property at the given path to the given value.
Returns the object.
### hasProperty(object, path)
Check whether the property at the given path exists.
Returns a boolean.
### deleteProperty(object, path)
Delete the property at the given path.
Returns a boolean of whether the property existed before being deleted.
### escapePath(path)
Escape special characters in a path. Useful for sanitizing user input.
```js
import {getProperty, escapePath} from 'dot-prop';const object = {
foo: {
bar: '👸🏻 You found me Mario!',
},
'foo.bar' : '🍄 The princess is in another castle!',
};
const escapedPath = escapePath('foo.bar');console.log(getProperty(object, escapedPath));
//=> '🍄 The princess is in another castle!'
```### deepKeys(object)
Returns an array of every path. Non-empty plain objects and arrays are deeply recursed and are not themselves included.
This can be useful to help flatten an object for an API that only accepts key-value pairs or for a tagged template literal.
```js
import {getProperty, deepKeys} from 'dot-prop';const user = {
name: {
first: 'Richie',
last: 'Bendall',
},
activeTasks: [],
currentProject: null
};for (const property of deepKeys(user)) {
console.log(`${property}: ${getProperty(user, property)}`);
//=> name.first: Richie
//=> name.last: Bendall
//=> activeTasks: []
//=> currentProject: null
}
```Sparse arrays are supported. In general, [avoid using sparse arrays](https://github.com/sindresorhus/dot-prop/issues/109#issuecomment-1614819869).
#### object
Type: `object | array`
Object or array to get, set, or delete the `path` value.
You are allowed to pass in `undefined` as the object to the `get` and `has` functions.
#### path
Type: `string`
Path of the property in the object, using `.` to separate each nested key.
Use `\\.` if you have a `.` in the key.
The following path components are invalid and results in `undefined` being returned: `__proto__`, `prototype`, `constructor`.
#### value
Type: `unknown`
Value to set at `path`.
#### defaultValue
Type: `unknown`
Default value.