Skip to content

Instantly share code, notes, and snippets.

@wlkns
Created September 24, 2017 19:10
Show Gist options
  • Save wlkns/60675ef0a356f943f50614c880cf4651 to your computer and use it in GitHub Desktop.
Save wlkns/60675ef0a356f943f50614c880cf4651 to your computer and use it in GitHub Desktop.
/**
* Returns the value at the given property.
*
* @param {object} - the input object
* @param {string} - the property accessor expression.
* @returns {*}
* @alias module:object-get
* @example
* > objectGet({ animal: 'cow' }, 'animal')
* 'cow'
*
* > objectGet({ animal: { mood: 'lazy' } }, 'animal')
* { mood: 'lazy' }
*
* > objectGet({ animal: { mood: 'lazy' } }, 'animal.mood')
* 'lazy'
*
* > objectGet({ animal: { mood: 'lazy' } }, 'animal.email')
* undefined
*/
function object_get(object, expression) {
if (!(object && expression)) throw new Error('both object and expression args are required')
return (''+expression).trim().split('.').reduce(function (prev, curr) {
var arr = curr.match(/(.*?)\[(.*?)\]/)
if (arr) {
return prev && prev[arr[1]][arr[2]]
} else {
return prev && prev[curr]
}
}, object);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment