@szydlovski/deep-object
Version:
utility functions for deeply nested objects
33 lines • 1.17 kB
JavaScript
export function _deepObjectOperation(...args) {
const [target, callback, depthFirst, pathSoFar = []] = args;
const entries = Object.entries(target);
const trvD = () => entries.forEach(([key, value]) => _isObject(value) && _deepObjectOperation(value, callback, depthFirst, [...pathSoFar, key]));
const trvB = () => entries.forEach(([key, value]) => callback(value, key, [...pathSoFar, key], target, _isObject(value)));
if (depthFirst) {
trvD();
trvB();
}
else {
trvB();
trvD();
}
}
export function _isObject(value) {
return (value !== null && typeof value === 'object' && value.constructor === Object);
}
export function _deepObjectTraverse(target, [...path], create = true) {
let step;
while (step = path.shift()) {
if (!_isObject(target[step])) {
if (create) {
target[step] = {};
}
else {
throw new TypeError('Cannot traverse object, provided path does not exist');
}
}
target = target[step];
}
return target;
}
//# sourceMappingURL=core.js.map