function arrayReduce(array, iteratee, accumulator, initAccum) {
  var index = -1,
      length = array ? array.length : 0;

  if (initAccum && length) {
    accumulator = array[++index];
  }
  while (++index < length) {
    accumulator = iteratee(accumulator, array[index], index, array);
  }
  return accumulator;
}
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.