Очевидно, что вам не следует этого делать, так как сортировать, а затем реверсировать результаты имеет гораздо больше смысла, но если вы действительно хотите отсортировать в обратном порядке внутри функции сортировки, вы можете сделать что-то вроде этого ...
_.sortBy(["Bob", "Mary", "Alice"], function (a) {
// split each string into single characters
// ... then swap for inverse character from unicode range
// ... and glue the characters back together into an inversely sortable string
return _.map(a.split(''), function(i){
return String.fromCharCode(65536 - i.charCodeAt(0));
}).join('');
});
... также стоит отметить, что подчеркивание несколько отличается от нативной сортировки javascript, которая имеет небольшую кросс-платформенную проблему в отношении согласованного порядка сортировки ...
If compareFunction (a,b) возвращает 0, оставляя a и b неизменными по отношению друг к другу, но отсортированные по всем различным элементам.Примечание: стандарт ECMAscript не гарантирует такого поведения, и, следовательно, не все браузеры (например, версии Mozilla, датируемые как минимум 2003 годом) соблюдают это. Array.prototype.sort ()
Документация Underscore .sortBy
:
Возвращает (стабильно) отсортированныйкопия списка. _. SortBy
Что он делает, вместо того, чтобы возвращать 0
, чтобы держать элементы в порядке, он возвращает индекс левой стороны минусуказатель с правой стороны.
_.sortBy = function(obj, iteratee, context) {
iteratee = cb(iteratee, context);
return _.pluck(_.map(obj, function(value, index, list) {
return {
value: value,
index: index,
criteria: iteratee(value, index, list)
};
}).sort(function(left, right) {
var a = left.criteria;
var b = right.criteria;
if (a !== b) {
if (a > b || a === void 0) return 1;
if (a < b || b === void 0) return -1;
}
return left.index - right.index;
}), 'value');
};