Created
April 6, 2012 17:40
-
-
Save jasonrhodes/2321581 to your computer and use it in GitHub Desktop.
Get a nested object property by passing a dot notation string as the property name
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* A function to take a string written in dot notation style, and use it to | |
* find a nested object property inside of an object. | |
* | |
* Useful in a plugin or module that accepts a JSON array of objects, but | |
* you want to let the user specify where to find various bits of data | |
* inside of each custom object instead of forcing a standardized | |
* property list. | |
* | |
* @param String nested A dot notation style parameter reference (ie "urls.small") | |
* @param Object object (optional) The object to search | |
* | |
* @return the value of the property in question | |
*/ | |
function getProperty( propertyName, object ) { | |
var parts = propertyName.split( "." ), | |
length = parts.length, | |
i, | |
property = object || this; | |
for ( i = 0; i < length; i++ ) { | |
property = property[parts[i]]; | |
} | |
return property; | |
} |
A functional answer might be (es2015 just because):
const getDescendantProp = (obj, path) => ( path.split('.').reduce((acc, part) => acc && acc[part], obj) );
Damn man, it doesn't even error if the path is not valid (no optional chaining needed), L33T. Thanks ! ❤️
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Would anyone know how to do this to handle array as well? like being able to do
myVal = getDescendantProp(myData, 'someProperty.deeperProperty[0].evendeeperproperty');