/node_modules/lodash/object/result.js
JavaScript | 49 lines | 19 code | 2 blank | 28 comment | 7 complexity | 62bf6ae32299187cd2426a74e67e1222 MD5 | raw file
Possible License(s): JSON, 0BSD, Apache-2.0, WTFPL, BSD-3-Clause, MIT, BSD-2-Clause
- var baseGet = require('../internal/baseGet'),
- baseSlice = require('../internal/baseSlice'),
- isFunction = require('../lang/isFunction'),
- isKey = require('../internal/isKey'),
- last = require('../array/last'),
- toPath = require('../internal/toPath');
- /**
- * This method is like `_.get` except that if the resolved value is a function
- * it is invoked with the `this` binding of its parent object and its result
- * is returned.
- *
- * @static
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to resolve.
- * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
- *
- * _.result(object, 'a[0].b.c1');
- * // => 3
- *
- * _.result(object, 'a[0].b.c2');
- * // => 4
- *
- * _.result(object, 'a.b.c', 'default');
- * // => 'default'
- *
- * _.result(object, 'a.b.c', _.constant('default'));
- * // => 'default'
- */
- function result(object, path, defaultValue) {
- var result = object == null ? undefined : object[path];
- if (result === undefined) {
- if (object != null && !isKey(path, object)) {
- path = toPath(path);
- object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
- result = object == null ? undefined : object[last(path)];
- }
- result = result === undefined ? defaultValue : result;
- }
- return isFunction(result) ? result.call(object) : result;
- }
- module.exports = result;