Deep Get

    Get a nested property value.

    Usage

    var deepGet = require( '@stdlib/utils/deep-get' );
    

    deepGet( obj, path[, options] )

    Returns a nested property value.

    var obj = { 'a': { 'b': { 'c': 'd' } } };
    
    var val = deepGet( obj, 'a.b.c' );
    // returns 'd'
    

    For paths including arrays, specify the numeric index.

    var arr = [
        { 'a': [ {'x': 5} ] },
        { 'a': [ {'x': 10} ] }
    ];
    
    var val = deepGet( arr, '1.a.0.x' );
    // returns 10
    

    The key path may be specified as either a delimited string or a key array.

    var obj = { 'a': { 'b': { 'c': 'd' } } };
    
    var val = deepGet( obj, [ 'a', 'b', 'c' ] );
    // returns 'd'
    

    The function accepts the following options:

    • sep: key path separator. Default: '.'.

    By default, the function assumes dot separated key values. To specify an alternative separator, set the sep option.

    var obj = { 'a': { 'b': { 'c': 'd' } } };
    
    var val = deepGet( obj, 'a/b/c', {
        'sep': '/'
    });
    // returns 'd'
    

    deepGet.factory( path[, options] )

    Creates a reusable deep get function. The factory method ensures a deepGet function is configured identically by using the same set of provided options.

    var dget = deepGet.factory( 'a/b/c', {
        'sep': '/'
    });
    

    dget( obj )

    Returns a nested property value.

    var dget = deepGet.factory( 'a.b.c' );
    
    var obj = { 'a': { 'b': { 'c': 'd' } } };
    
    var val = dget( obj );
    // returns 'd'
    

    Examples

    var randu = require( '@stdlib/random/base/randu' );
    var deepGet = require( '@stdlib/utils/deep-get' );
    
    var data;
    var keys;
    var val;
    var i;
    
    data = new Array( 100 );
    for ( i = 0; i < data.length; i++ ) {
        data[ i ] = {
            'x': Date.now(),
            'y': [ randu(), randu(), i ]
        };
    }
    
    keys = [ 0, 'y', 2 ];
    for ( i = 0; i < data.length; i++ ) {
        keys[ 0 ] = i;
        val = deepGet( data, keys );
        console.log( val );
    }