code: function sortBy(collection, iteratee) {
      var index = 0;
      iteratee = baseIteratee(iteratee);
  
      return baseMap(baseMap(collection, function(value, key, collection) {
        return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) };
      }).sort(function(object, other) {
        return compareAscending(object.criteria, other.criteria) || (object.index - other.index);
      }), baseProperty('value'));
    }
docs: Creates an array of elements, sorted in ascending order by the results of
  running each element in a collection thru each iteratee. This method
  performs a stable sort, that is, it preserves the original sort order of
  equal elements. The iteratees are invoked with one argument: (value).
  
  @static
  @memberOf _
  @since 0.1.0
  @category Collection
  @param {Array|Object} collection The collection to iterate over.
  @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])}
  [iteratees=[_.identity]] The iteratees to sort by.
  @returns {Array} Returns the new sorted array.
  @example
  
  var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 }
  ];
  
  _.sortBy(users, function(o) { return o.user; });
  // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
  
  _.sortBy(users, ['user', 'age']);
  // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
  
  _.sortBy(users, 'user', function(o) {
  return Math.floor(o.age / 10);
  });
  // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]