foop
Version:
interfaces that describe their intentions.
41 lines (37 loc) • 2.93 kB
JavaScript
var isNil = require('../is/nullOrUndefined')
var curry = require('./curry')
/**
* @desc retrieve the value at a given path.
* @since v5.0.0
* @memberOf fp
* @curried 2
*
* @param {Array} path The path to use.
* @param {Object} obj The object to retrieve the nested property from.
* @return {*} The data at `path`.
*
* @func
* @category Object
* @typedefn Idx = String | Int
* @sig [Idx] -> {a} -> a | Undefined
*
* {@link https://github.com/ramda/ramda/blob/master/src/path.js ramda-path}
* @see {@link ramda-path}
* @see fp/prop
*
* @example
*
* path(['a', 'b'], {a: {b: 2}}); //=> 2
* path(['a', 'b'], {c: {b: 2}}); //=> undefined
*
*/
module.exports = curry(2, function path(paths, obj) {
var value = obj
var index = 0
while (index < paths.length) {
if (isNil(value)) { return }
value = value[paths[index++]]
}
return value
})
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZXMiOlsicGF0aC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc05pbCA9IHJlcXVpcmUoJy4uL2lzL251bGxPclVuZGVmaW5lZCcpXG5jb25zdCBjdXJyeSA9IHJlcXVpcmUoJy4vY3VycnknKVxuXG4vKipcbiAqIEBkZXNjIHJldHJpZXZlIHRoZSB2YWx1ZSBhdCBhIGdpdmVuIHBhdGguXG4gKiBAc2luY2UgdjUuMC4wXG4gKiBAbWVtYmVyT2YgZnBcbiAqIEBjdXJyaWVkIDJcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwYXRoIFRoZSBwYXRoIHRvIHVzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byByZXRyaWV2ZSB0aGUgbmVzdGVkIHByb3BlcnR5IGZyb20uXG4gKiBAcmV0dXJuIHsqfSBUaGUgZGF0YSBhdCBgcGF0aGAuXG4gKlxuICogQGZ1bmNcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEB0eXBlZGVmbiBJZHggPSBTdHJpbmcgfCBJbnRcbiAqIEBzaWcgW0lkeF0gLT4ge2F9IC0+IGEgfCBVbmRlZmluZWRcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2Jsb2IvbWFzdGVyL3NyYy9wYXRoLmpzIHJhbWRhLXBhdGh9XG4gKiBAc2VlIHtAbGluayByYW1kYS1wYXRofVxuICogQHNlZSBmcC9wcm9wXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHBhdGgoWydhJywgJ2InXSwge2E6IHtiOiAyfX0pOyAvLz0+IDJcbiAqICAgICAgcGF0aChbJ2EnLCAnYiddLCB7Yzoge2I6IDJ9fSk7IC8vPT4gdW5kZWZpbmVkXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5KDIsIGZ1bmN0aW9uIHBhdGgocGF0aHMsIG9iaikge1xuICBsZXQgdmFsdWUgPSBvYmpcbiAgbGV0IGluZGV4ID0gMFxuXG4gIHdoaWxlIChpbmRleCA8IHBhdGhzLmxlbmd0aCkge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHJldHVyblxuICAgIHZhbHVlID0gdmFsdWVbcGF0aHNbaW5kZXgrK11dXG4gIH1cblxuICByZXR1cm4gdmFsdWVcbn0pXG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUM5Q0EsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEyQmhDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0VBQ2xEQyxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUc7RUFDZkEsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDOztFQUViLE9BQU8sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7SUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBQSxNQUFNLEVBQUE7SUFDeEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztHQUM5Qjs7RUFFRCxPQUFPLEtBQUs7Q0FDYixDQUFDOyJ9