j-walk

A simple dot notation JavaScript object getter/setter

Usage no npm install needed!

<script type="module">
  import jWalk from 'https://cdn.skypack.dev/j-walk';
</script>

README

j-walk

Build Status devDependency Status Coverage NPM Version

tiny dot notation JavaScript object getter/setter

Install

npm install j-walk

API

jwalk(*selector*).get(*key*)

returns undefined if not found

jwalk(*selector*).set(*key*, *value*)

create and set property value if undefined through the nesting chain. Stops new value creation at first undefined array selector

jwalk(*selector*).exists(*key*)

truthy assertion if property is defined


get

let jwalk = require('j-walk');

let base = {'root': 42};

jwalk(base).get('root');           // 42
jwalk(base).get('root.nested-a');  // undefined

let base = {
  'root': {
    'nested-a': {
      'nested-b': {
        'nested-c': 42
      }
    },
    'sibling-a': 84
  }
};
    
jwalk(base).get('root.nested-a.nested-b.nested-c');  // 42
jwalk(base).get('root.nested-a.sibling-a');          // 84

let base = [
  {'id': 2, value: 21},
  {'id': 4, value: 42},
  {'id': 6, value: 84, name: 'scniro'}
];

jwalk(base).get('[id=4].value');         // 42
jwalk(base).get('[id=5].value');         // undefined
jwalk(base).get('[name=scniro].value');  // 84

let base = {
  'root': {
    'collectionA': [
      {id: 1},
      {id: 2, collectionB: [
        {id: 10, value: 21},
        {id: 20, value: 42},
        {id: 30, value: 84}]
      },
    {id: 3}]
  }
};

jwalk(base).get('root.collectionA.[id=2].collectionB.[id=20].value')  // 42

set

let base = {};

jwalk(base).set('root.nested.sub', 42);
jwalk(base).set('root.nested', { sub: 42 });
// base = { root: { sub: { nested: 42 } } }

let base = {
  'root': [
    {id: 1, value: 10},
    {id: 2, value: 20},
    {id: 3, value: 30}
  ]
};

jwalk(base).set('root.[id=2]', {other: 'foo'});
// 'root': [{id: 1, value: 10}, {id: 2, value: 20, other: 'foo'}, [...]

exists

let base = {'root': null};
jwalk(base).exists('root')         // true
jwalk(base).exists('root.nested')  // false

License

MIT © 2017 scniro