| var arrayReduce = require('../internal/arrayReduce'), |
| baseEach = require('../internal/baseEach'), |
| createReduce = require('../internal/createReduce'); |
| |
| /** |
| * Reduces `collection` to a value which is the accumulated result of running |
| * each element in `collection` through `iteratee`, where each successive |
| * invocation is supplied the return value of the previous. If `accumulator` |
| * is not provided the first element of `collection` is used as the initial |
| * value. The `iteratee` is bound to `thisArg` and invoked with four arguments: |
| * (accumulator, value, index|key, collection). |
| * |
| * Many lodash methods are guarded to work as iteratees for methods like |
| * `_.reduce`, `_.reduceRight`, and `_.transform`. |
| * |
| * The guarded methods are: |
| * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`, |
| * and `sortByOrder` |
| * |
| * @static |
| * @memberOf _ |
| * @alias foldl, inject |
| * @category Collection |
| * @param {Array|Object|string} collection The collection to iterate over. |
| * @param {Function} [iteratee=_.identity] The function invoked per iteration. |
| * @param {*} [accumulator] The initial value. |
| * @param {*} [thisArg] The `this` binding of `iteratee`. |
| * @returns {*} Returns the accumulated value. |
| * @example |
| * |
| * _.reduce([1, 2], function(total, n) { |
| * return total + n; |
| * }); |
| * // => 3 |
| * |
| * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { |
| * result[key] = n * 3; |
| * return result; |
| * }, {}); |
| * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed) |
| */ |
| var reduce = createReduce(arrayReduce, baseEach); |
| |
| module.exports = reduce; |