Fetch Object Value
Simple function to fetch object values from string paths
Ex: 'body', 'body.foo', 'body.bar.foo', 'body.far.$1', 'body.boo.$.foo'
by GlobalDomestic
JavaScript
var o = {
body: {
foo: 'lorem',
bar: {foo: 'ipsum', bar: true},
far: [1,2,3],
boo: [{foo:'alpha',bar:false}, {foo:'bravo',bar:true}]
}
};
['body', 'body.foo', 'body.bar.foo', 'body.far.$1', 'body.boo.$.foo'].forEach(function (path) {
console.log(fetch(o, path), path);
});
function fetch(obj, path) {
return path.split('.').reduce(function parsePath(ret, subPath, i, subPaths) {
var arrayCheck = subPath.match(/^\$(\d*)$/);
if (arrayCheck) {
if (arrayCheck[1].length === 0) {
subPath = subPaths.splice(i + 1).join('.');
return ret.map(function arrayMap(val) {
return fetch(val, subPath);
});
}
subPath = arrayCheck[1];
}
return ret[subPath];
}, obj);
}