| 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; |