node package manager

dottie

Fast and safe nested object access and manipulation in JavaScript

Dottie helps you easily (and with sacrificing too much performance) look up and play with nested keys in objects, without them throwing up in your face.

npm install dottie

For detailed usage, check source or tests.

Gets nested value, or undefined if unreachable, or a default value if passed.

var values = {
  some: {
    nested: {
        key: 'foobar';
    }
  },
  'some.dot.included': {
    key: 'barfoo'
  }
}
 
dottie.get(values, 'some.nested.key'); // returns 'foobar' 
dottie.get(values, 'some.undefined.key'); // returns undefined 
dottie.get(values, 'some.undefined.key', 'defaultval'); // returns 'defaultval' 
dottie.get(values, ['some.dot.included', 'key']); // returns 'barfoo' 

Sets nested value, creates nested structure if needed

dottie.set(values, 'some.nested.value', someValue);
dottie.set(values, ['some.dot.included', 'value'], someValue);
dottie.set(values, 'some.nested.object', someValue, {
  force: true // force overwrite defined non-object keys into objects if needed 
});

Transform object from keys with dottie notation to nested objects

var values = {
  'user.name': 'Gummy Bear',
  'user.email': 'gummybear@candymountain.com',
  'user.professional.title': 'King',
  'user.professional.employer': 'Candy Mountain'
};
var transformed = dottie.transform(values);
 
/*
{
  user: {
    name: 'Gummy Bear',
    email: 'gummybear@candymountain.com',
    professional: {
      title: 'King',
      employer: 'Candy Mountain'
    }
  }
}
*/
var values = {
  'user_name': 'Mick Hansen',
  'user_email': 'maker@mhansen.io'
};
var transformed = dottie.transform(values, { delimiter: '_' });
 
/*
{
  user: {
    name: 'Mick Hansen',
    email: 'maker@mhansen.io'
  }
}
*/
var object = {
  a: 1,
  b: {
    c: 2,
    d: { e: 3 }
  }
};
 
dottie.paths(object); // ["a", "b.c", "b.d.e"]; 

0.3.1 and up ships with dottie.memoizePath: true by default, if this causes any bugs, please try setting it to false

MIT