Как я могу сортировать asc и desc, используя underscore.js?

В настоящее время я использую underscorejs для сортировки сортировки json. Теперь я попросил выполнить сортировку ascending и descending, используя 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

Обратный метод прототипа Array изменяет массив и возвращает ссылку на него, что означает, что вы можете сделать это:

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.