JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 214
  • Score
    100M100P100Q79889F
  • License MIT

Fast library for manipulating plain objects using paths.

Package Exports

  • path-prop

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (path-prop) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Path Prop

Fast library for manipulating plain objects using paths.

This library is similar to 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.
  • Lightweight: it has 0 dependencies and it's comprised of about 100 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

npm install --save path-prop

Usage

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