Spaces:
Runtime error
Runtime error
var arrayReduce = require('./_arrayReduce'), | |
baseEach = require('./_baseEach'), | |
baseIteratee = require('./_baseIteratee'), | |
baseReduce = require('./_baseReduce'), | |
isArray = require('./isArray'); | |
/** | |
* Reduces `collection` to a value which is the accumulated result of running | |
* each element in `collection` thru `iteratee`, where each successive | |
* invocation is supplied the return value of the previous. If `accumulator` | |
* is not given, the first element of `collection` is used as the initial | |
* value. The iteratee is 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`, `orderBy`, | |
* and `sortBy` | |
* | |
* @static | |
* @memberOf _ | |
* @since 0.1.0 | |
* @category Collection | |
* @param {Array|Object} collection The collection to iterate over. | |
* @param {Function} [iteratee=_.identity] The function invoked per iteration. | |
* @param {*} [accumulator] The initial value. | |
* @returns {*} Returns the accumulated value. | |
* @see _.reduceRight | |
* @example | |
* | |
* _.reduce([1, 2], function(sum, n) { | |
* return sum + n; | |
* }, 0); | |
* // => 3 | |
* | |
* _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { | |
* (result[value] || (result[value] = [])).push(key); | |
* return result; | |
* }, {}); | |
* // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) | |
*/ | |
function reduce(collection, iteratee, accumulator) { | |
var func = isArray(collection) ? arrayReduce : baseReduce, | |
initAccum = arguments.length < 3; | |
return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); | |
} | |
module.exports = reduce; | |