npm.io
0.1.4 • Published 10 years ago

reach-deep

Licence
MIT
Version
0.1.4
Deps
0
Vulns
0
Weekly
0

reach-deep

Tired of cannot read property "xyz" of undefined ? This tiny utility helps to reach nested objects.

Install

$ npm install reach-deep

Require

var reach = require("reach-deep");

Description:

Returns the value of a nested property of source object if it exists. Even if the nested property evaluates to false it will be returned. If the nested property does not exist, undefined will be returned.

Benchmark

Is about 4 times faster than "reach" module. To test the performance with micro-benchmark run:

$ npm run benchmark

Signature

/**
* @param {Object} source       source object
* @param {String} path         path without first dot e.g. "response.http.statusCode"
* @param {String} [sourceName]  if provided, any caught error will be logged to console
* @returns {*}                 value under the source.path or undefined
*/
function reach(source, path, sourceName){..}

Examples:

Simple reach
var object ={
   a: {
      b: {
         c : 'data'
      }
   }
};

var result = reach(object, 'a.b.c'); // 'data'
var resultNotExisting = reach(object, 'a.b.c.d.e.f'); // undefined
Complex reach
var mock = {
        a: function () {
            return {
                b: {
                    c: [
                        {},
                        {
                            "d": {
                                e: 'expected'
                            }
                        }
                    ]
                }
            }
        }
    };
var result = reach(mock, 'a().b.c[1]["d"].e'); // 'expected'
Reach verbose
var mock = {};
reach(mock, 'a().b.c[1]["d"].e', 'mock'); // logs to console: TypeError['mock.a is not a function']