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; | |
} |
is there anybody help me about angular 6?
@laxa88 Hi
I tried 10 other examples before this that all failed miserably, yours worked like a charm, thanks!
How can I get this working for something like obj->geometry[6]->obs[3]->latitude ?
Would anyone know how to do this to handle array as well? like being able to do
myVal = getDescendantProp(myData, 'someProperty.deeperProperty[0].evendeeperproperty');
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
hi dudes