code: function createAggregator(setter, initializer) {
        return function(collection, callback, thisArg) {
          var result = initializer ? initializer() : {};
          callback = lodash.createCallback(callback, thisArg, 3);
  
          var index = -1,
              length = collection ? collection.length : 0;
  
          if (typeof length == 'number' && length > -1 && length <= maxSafeInteger) {
            while (++index < length) {
              var value = collection[index];
              setter(result, value, callback(value, index, collection), collection);
            }
          } else {
            baseEach(collection, function(value, key, collection) {
              setter(result, value, callback(value, key, collection), collection);
            });
          }
          return result;
        };
      }
docs: Creates a function that aggregates a collection, creating an accumulator
  object composed from the results of running each element in the collection
  through a callback. The given setter function sets the keys and values of
  the accumulator object. If `initializer` is provided will be used to
  initialize the accumulator object.
  
  @private
  @param {Function} setter The function to set keys and values of the accumulator object.
  @param {Function} [initializer] The function to initialize the accumulator object.
  @returns {Function} Returns the new aggregator function.