1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /*!
- * get-value <https://github.com/jonschlinkert/get-value>
- *
- * Copyright (c) 2014-2015, Jon Schlinkert.
- * Licensed under the MIT License.
- */
-
- module.exports = function(obj, prop, a, b, c) {
- if (!isObject(obj) || !prop) {
- return obj;
- }
-
- prop = toString(prop);
-
- // allowing for multiple properties to be passed as
- // a string or array, but much faster (3-4x) than doing
- // `[].slice.call(arguments)`
- if (a) prop += '.' + toString(a);
- if (b) prop += '.' + toString(b);
- if (c) prop += '.' + toString(c);
-
- if (prop in obj) {
- return obj[prop];
- }
-
- var segs = prop.split('.');
- var len = segs.length;
- var i = -1;
-
- while (obj && (++i < len)) {
- var key = segs[i];
- while (key[key.length - 1] === '\\') {
- key = key.slice(0, -1) + '.' + segs[++i];
- }
- obj = obj[key];
- }
- return obj;
- };
-
- function isObject(val) {
- return val !== null && (typeof val === 'object' || typeof val === 'function');
- }
-
- function toString(val) {
- if (!val) return '';
- if (Array.isArray(val)) {
- return val.join('.');
- }
- return val;
- }
|