| var LazyWrapper = require('./_LazyWrapper'), | |
| LodashWrapper = require('./_LodashWrapper'), | |
| baseAt = require('./_baseAt'), | |
| flatRest = require('./_flatRest'), | |
| isIndex = require('./_isIndex'), | |
| thru = require('./thru'); | |
| /** | |
| * This method is the wrapper version of `_.at`. | |
| * | |
| * @name at | |
| * @memberOf _ | |
| * @since 1.0.0 | |
| * @category Seq | |
| * @param {...(string|string[])} [paths] The property paths to pick. | |
| * @returns {Object} Returns the new `lodash` wrapper instance. | |
| * @example | |
| * | |
| * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; | |
| * | |
| * _(object).at(['a[0].b.c', 'a[1]']).value(); | |
| * // => [3, 4] | |
| */ | |
| var wrapperAt = flatRest(function(paths) { | |
| var length = paths.length, | |
| start = length ? paths[0] : 0, | |
| value = this.__wrapped__, | |
| interceptor = function(object) { return baseAt(object, paths); }; | |
| if (length > 1 || this.__actions__.length || | |
| !(value instanceof LazyWrapper) || !isIndex(start)) { | |
| return this.thru(interceptor); | |
| } | |
| value = value.slice(start, +start + (length ? 1 : 0)); | |
| value.__actions__.push({ | |
| 'func': thru, | |
| 'args': [interceptor], | |
| 'thisArg': undefined | |
| }); | |
| return new LodashWrapper(value, this.__chain__).thru(function(array) { | |
| if (length && !array.length) { | |
| array.push(undefined); | |
| } | |
| return array; | |
| }); | |
| }); | |
| module.exports = wrapperAt; |