[example] Curried deep property accessor

node v4.9.1
version: master
endpointsharetweet
function get(path) { function _get(source) { var end = path.length; var idx = -1; var ref = source; while (++idx < end) { if (!ref) break; ref = ref[path[idx]]; } return ref; } return (arguments.length > 1) ? _get(arguments[1]) : _get.bind(null) }
var data = { client: { 'message.id': 'd50afb80-a6be-11e2-9e96-0800200c9a66' } }; get(['client', 'message.id'], data); // returns 'd50afb80-a6be-11e2-9e96-0800200c9a66'
// array access // get first (primary) address for each contact var contacts = [ { addresses: [ '123 Main St, Broomfield, CO 80020', '123 Main St, Denver, CO 80202' ] }, { addresses: [ '123 Main St, Kirkland, IL 60146' ] }, { phones: [] }, ] contacts.map(get(['addresses', 0])) //=> [ '123 Main St, Broomfield, CO 80020', '123 Main St, Kirkland, IL 60146', undefined ]
// point-free partial application via promises chain var data = Promise.resolve({ client: { 'message.id': 'd50afb80-a6be-11e2-9e96-0800200c9a66' } }); data .then(get(['client', 'message.id'])) .then(console.log.bind(console)) // prints 'd50afb80-a6be-11e2-9e96-0800200c9a66'
Loading…

no comments

    sign in to comment