High performance utilities for dealing with nested objects.
Deep gets an object property value.
const obj = {
some: {
deep: {
prop: 'foobar',
},
},
};
const prop = deeps.get(obj, 'some.deep.prop'); // foobar
const prop = deeps.get(obj, 'some.deep.key'); // undefined
Deep sets an object property value.
const obj = {
some: {
deep: {
prop: 'foobar',
},
},
};
deeps.set(obj, 'some.deep.prop', 'barbaz');
Same as Object.keys except deeply.
const obj = {
some: {
deep: {
prop: 'foobar',
key: 'barbaz',
},
},
};
const keys = deeps.keys(object); // ['some.deep.prop', 'some.deep.key']
Returns an object of differences between to objects.
const obj1 = {
a: 1,
b: 3,
};
const obj2 = {
a: 2,
b: 3,
};
const diff = deeps.keys(obj1, obj2); // { a: 2 }
Same as Object.assign but deeply.
const target = {
a: 1,
b: {
c: 2,
},
};
const source = {
a: 1,
b: {
c: 2,
d: 3,
},
};
deeps.merge(target, source);
// target = { a: 1, b: { c: 2, d: 3 } }
const object = {
a: 1,
b: {
c: 2,
d: 3,
},
};
deeps.values(object); // [1, 2, 3]
Flattens an object to an object of key paths with the values
const object = {
a: 1,
b: {
c: 2,
d: {
e: 3,
f: 4
},
},
};
const flatten = deeps.flatten(object);
// flatten:
{
'a': 1,
'b.c': 2,
'b.d.e': 3,
'b.d.f': 4,
}
Unflattens an object of key paths (reverse flatten)
const object = {
'a': 1,
'b.c': 2,
'b.d.e': 3,
'b.d.f': 4,
}
const unflatten = deeps.unflatten(object);
// unflatten:
{
a: 1,
b: {
c: 2,
d: {
e: 3,
f: 4,
},
},
};
TODO
I've been using these utils a lot in personal projects so made sense to move them into a module. (and I wanted to make them more efficient ;p)
Platform info:
Darwin 15.6.0 x64
Node.JS 6.8.1
V8 5.1.281.84
Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz × 8
DIFF: deeply nested object x 1,305,372 ops/sec ±1.73% (89 runs sampled)
FLATTEN: deeply nested with array x 1,574,470 ops/sec ±1.57% (87 runs sampled)
GET: single depth x 10,753,107 ops/sec ±0.90% (92 runs sampled)
GET: deeply nested with array x 6,302,773 ops/sec ±1.72% (89 runs sampled)
SET: single depth x 7,480,487 ops/sec ±1.91% (84 runs sampled)
SET: deeply nested with array x 6,010,088 ops/sec ±0.91% (93 runs sampled)