define(['./_cb', './each'], function (_cb, each) {
  // An internal function used for aggregate "group by" operations.
  function group(behavior, partition) {
    return function (obj, iteratee, context) {
      var result = partition ? [[], []] : {};
      iteratee = _cb(iteratee, context);
      each(obj, function (value, index) {
        var key = iteratee(value, index, obj);
        behavior(result, value, key);
      });
      return result;
    };
  }

  return group;
});