code: function(arr, map, desc) {
      arr.sort(function(a, b) {
        var aProperty = mapWithShortcuts(a, map, arr, [a]);
        var bProperty = mapWithShortcuts(b, map, arr, [b]);
        return compareValue(aProperty, bProperty) * (desc ? -1 : 1);
      });
      return arr;
    }
docs: *
  @method sortBy([map], [desc] = false)
  @returns Array
  @short Enhanced sorting function that will sort the array by `map`.
  @extra `map` can be a function of type `sortMapFn`, a string acting as a
  shortcut, an array (comparison by multiple values), or blank (direct
  comparison of array values). `map` supports `deep properties`.
  [desc] will sort the array in descending order. When the field being
  sorted on is a string, the resulting order will be determined by an
  internal collation algorithm that is optimized for major Western
  languages, but can be customized using sorting accessors such as
  `sortIgnore`. This method will modify the array!
  
  @callback sortMapFn
  
  el   An array element.
  
  @example
  
  ['world','a','new'].sortBy('length')       -> ['a','new','world']
  ['world','a','new'].sortBy('length', true) -> ['world','new','a']
  users.sortBy(function(n) {
  return n.age;
  }); -> users array sorted by age
  users.sortBy('age') -> users array sorted by age
  
  @param {string|sortMapFn} [map]
  @param {boolean} [desc]
  @callbackParam {ArrayElement} el
  @callbackReturns {NewArrayElement} sortMapFn
  
  *