time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

reduce.js (1806B)


      1 var arrayReduce = require('./_arrayReduce'),
      2     baseEach = require('./_baseEach'),
      3     baseIteratee = require('./_baseIteratee'),
      4     baseReduce = require('./_baseReduce'),
      5     isArray = require('./isArray');
      6 
      7 /**
      8  * Reduces `collection` to a value which is the accumulated result of running
      9  * each element in `collection` thru `iteratee`, where each successive
     10  * invocation is supplied the return value of the previous. If `accumulator`
     11  * is not given, the first element of `collection` is used as the initial
     12  * value. The iteratee is invoked with four arguments:
     13  * (accumulator, value, index|key, collection).
     14  *
     15  * Many lodash methods are guarded to work as iteratees for methods like
     16  * `_.reduce`, `_.reduceRight`, and `_.transform`.
     17  *
     18  * The guarded methods are:
     19  * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     20  * and `sortBy`
     21  *
     22  * @static
     23  * @memberOf _
     24  * @since 0.1.0
     25  * @category Collection
     26  * @param {Array|Object} collection The collection to iterate over.
     27  * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     28  * @param {*} [accumulator] The initial value.
     29  * @returns {*} Returns the accumulated value.
     30  * @see _.reduceRight
     31  * @example
     32  *
     33  * _.reduce([1, 2], function(sum, n) {
     34  *   return sum + n;
     35  * }, 0);
     36  * // => 3
     37  *
     38  * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     39  *   (result[value] || (result[value] = [])).push(key);
     40  *   return result;
     41  * }, {});
     42  * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     43  */
     44 function reduce(collection, iteratee, accumulator) {
     45   var func = isArray(collection) ? arrayReduce : baseReduce,
     46       initAccum = arguments.length < 3;
     47 
     48   return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
     49 }
     50 
     51 module.exports = reduce;