Как я могу сделать сортировку asc и desc с помощью подчеркивания.Джей?
в настоящее время я использую underscorejs для сортировки моей сортировки json. Теперь я попросил сделать ascending
и descending
сортировка с помощью подчеркивания.js. Я не вижу ничего подобного в документации. Как я могу этого достичь?
4 ответа:
можно использовать
.sortBy
, оно всегда будет возвращать по возрастанию список:_.sortBy([2, 3, 1], function(num) { return num; }); // [1, 2, 3]
но вы можете использовать .обратный метод, чтобы получить его спуск:
var array = _.sortBy([2, 3, 1], function(num) { return num; }); console.log(array); // [1, 2, 3] console.log(array.reverse()); // [3, 2, 1]
или при работе с числами добавьте отрицательный знак к возвращению, чтобы спуститься по списку:
_.sortBy([-3, -2, 2, 3, 1, 0, -1], function(num) { return -num; }); // [3, 2, 1, 0, -1, -2, -3]
под капотом
.sortBy
использует встроенный.sort([handler])
:// Default is ascending: [2, 3, 1].sort(); // [1, 2, 3] // But can be descending if you provide a sort handler: [2, 3, 1].sort(function(a, b) { // a = current item in array // b = next item in array return b - a; });
порядок убывания с помощью подчеркивания можно сделать, умножив возвращаемое значение на -1.
//Ascending Order: _.sortBy([2, 3, 1], function(num){ return num; }); // [1, 2, 3] //Descending Order: _.sortBy([2, 3, 1], function(num){ return num * -1; }); // [3, 2, 1]
Если вы сортируете по строкам, а не по номерам, вы можете использовать метод charCodeAt() для получения значения unicode.
//Descending Order Strings: _.sortBy(['a', 'b', 'c'], function(s){ return s.charCodeAt() * -1; });
The обратный метод прототипа массива изменяет массив и возвращает ссылку на него, а значит, вы можете сделать это:
var sortedAsc = _.sortBy(collection, 'propertyName'); var sortedDesc = _.sortBy(collection, 'propertyName').reverse();
кроме того, подчеркивание документации гласит:
кроме того,методы прототипа массива проксируются через цепочку подчеркивания объекта, так что вы можете проскользнуть
reverse
илиpush
в вашу цепочку и продолжайте изменять массив.что означает, что вы также можете использовать
.reverse()
во время связывания:var sortedDescAndFiltered = _.chain(collection) .sortBy('propertyName') .reverse() .filter(_.property('isGood')) .value();
подобно библиотеке подчеркивания есть еще одна библиотека, называемая "lodash", которая имеет один метод" orderBy", который принимает параметр, чтобы определить, в каком порядке его сортировать. Вы можете использовать его как
_.orderBy('collection', 'propertyName', 'desc')
по какой-то причине это не задокументировано на веб-сайте docs.