[example] Curried deep property accessor
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'
no comments