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);
}