В настоящее время я использую underscorejs для сортировки сортировки json. Теперь я попросил выполнить сортировку ascending
и descending
, используя underscore.js. Я не вижу ничего подобного в документации. Как я могу это достичь?
Как я могу сортировать asc и desc, используя underscore.js?
Ответ 1
Вы можете использовать .sortBy
, он всегда будет возвращать возрастающий список:
_.sortBy([2, 3, 1], function(num) {
return num;
}); // [1, 2, 3]
Но вы можете использовать метод reverse, чтобы получить его по убыванию:
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;
});
Ответ 2
По убыванию с помощью подчеркивания можно сделать, умножив возвращаемое значение на -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;
});
Ответ 3
var sortedAsc = _.sortBy(collection, 'propertyName');
var sortedDesc = _.sortBy(collection, 'propertyName').reverse();
Кроме того, документация подчеркивания гласит:
Кроме того, методы Array prototype проксируются через связанный объект Underscore, поэтому вы можете пропустить
reverse
илиpush
в свою цепочку и продолжить изменять массив.
что означает, что вы также можете использовать .reverse()
при цепочке:
var sortedDescAndFiltered = _.chain(collection).sortBy('propertyName').reverse().filter(_.property('isGood')).value();
Ответ 4
Подобно библиотеке Underscore существует еще одна библиотека, называемая "lodash", которая имеет один метод "orderBy", который принимает параметр, чтобы определить, в каком порядке его сортировать. Вы можете использовать его как
_.orderBy('collection', 'propertyName', 'desc')
По какой-то причине он не задокументирован на веб-сайте docs.