| /** |
| * A specialized version of `_.reduce` for arrays without support for |
| * iteratee shorthands. |
| * |
| * @private |
| * @param {Array} [array] The array to iterate over. |
| * @param {Function} iteratee The function invoked per iteration. |
| * @param {*} [accumulator] The initial value. |
| * @param {boolean} [initAccum] Specify using the first element of `array` as |
| * the initial value. |
| * @returns {*} Returns the accumulated value. |
| */ |
| function arrayReduce(array, iteratee, accumulator, initAccum) { |
| var index = -1, |
| length = array == null ? 0 : array.length; |
| |
| if (initAccum && length) { |
| accumulator = array[++index]; |
| } |
| while (++index < length) { |
| accumulator = iteratee(accumulator, array[index], index, array); |
| } |
| return accumulator; |
| } |
| |
| module.exports = arrayReduce; |