Как я могу сделать сортировку asc и desc с помощью подчеркивания.Джей?


в настоящее время я использую underscorejs для сортировки моей сортировки json. Теперь я попросил сделать ascending и descending сортировка с помощью подчеркивания.js. Я не вижу ничего подобного в документации. Как я могу этого достичь?

4 149

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.