https://github.com/fabiospampinato/path-prop
Fast library for manipulating plain objects using paths.
https://github.com/fabiospampinato/path-prop
delete flat get has object path prop remove set unflat
Last synced: 11 months ago
JSON representation
Fast library for manipulating plain objects using paths.
- Host: GitHub
- URL: https://github.com/fabiospampinato/path-prop
- Owner: fabiospampinato
- License: mit
- Created: 2019-10-05T12:37:13.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-09-24T16:28:50.000Z (over 2 years ago)
- Last Synced: 2025-06-24T21:46:00.259Z (11 months ago)
- Topics: delete, flat, get, has, object, path, prop, remove, set, unflat
- Language: JavaScript
- Size: 19.5 KB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
README
# Path Prop
Fast library for manipulating plain objects using paths.
This library is similar to [dot-prop](https://github.com/sindresorhus/dot-prop), but it achieves up to 3x better performance, it offers a couple of additional methods for dealing with flat objects and it has a few more restrictions.
## Features
- **Performant**: it is up to 3x faster than [dot-prop](https://github.com/sindresorhus/dot-prop).
- **Lightweight**: it has just a few tiny dependencies and it's comprised of about 200 lines of code.
- **Flat objects**: a few additional methods are provided for flattening and unflattening objects.
## Restrictions
In order to achieve maximum performance a few limitations/restrictions have been introduced:
- If a property is set to `undefined` it will be considered as not set.
- There's no way to escape dots in paths.
- It's only supposed to manipulate objects, not functions etc.
- It doesn't check if a property is owned or enumerable.
## Install
```sh
npm install --save path-prop
```
## Usage
```ts
import pp from 'path-prop';
/* GET */
let object = { foo: { bar: 123 } };
pp.get ( object, 'foo' ); // => { bar: 123 }
pp.get ( object, 'foo.bar' ); // => 123
pp.get ( object, 'foo.bar.baz' ); // => undefined
pp.get ( object, 'foo.bar.baz', 1 ); // => 1
/* HAS */
object = { foo: { bar: 123 } };
pp.has ( object, 'foo' ); // => true
pp.has ( object, 'foo.bar' ); // => true
pp.has ( object, 'foo.bar.baz' ); // => false
/* SET */
pp.set ( { foo: { bar: 123 } }, 'bar', 1 ); // => { foo: { bar: 123 }, bar: 1 }
pp.set ( { foo: { bar: 123 } }, 'foo.bar', 1 ); // => { foo: { bar: 1 } }
pp.set ( { foo: { bar: 123 } }, 'foo.bar.baz', 1 ); // => { foo: { bar: { baz: 1 } } }
/* DELETE */
object = { foo: { bar: 123 } };
pp.delete ( object, 'foo.bar' ); // => undefined
console.log ( object ); // => { foo: {} }
/* FLAT */
object = { foo: { bar: 123, baz: 'test' }, bar: 1 };
pp.flat ( object ); // => { 'foo.bar': 123, 'foo.baz': 'test', bar: 1 }
/* UNFLAT */
object = { 'foo.bar': 123, 'foo.baz': 'test', bar: 1 };
pp.unflat ( object ); // => { foo: { bar: 123, baz: 'test' }, bar: 1 }
```
## API
### `get ( object, path, fallback? )`
Gets the value at `path`, returning `fallback` if it's not set.
### `has ( object, path )`
Checks if a value is set at `path`.
### `set ( object, path, value )`
Sets `value` at `path`.
### `delete ( object, path )`
Deletes the value at `path`.
### `flat ( object )`
Transforms a potentially deep object into a flat object.
### `unflat ( object )`
Transforms a flat object into a potentially deep object.
## License
MIT © Fabio Spampinato