В настоящее время я использую underscorejs для сортировки JSON сортировки. Теперь я попросил сделать ascending
и descending
сортировку с использованием underscore.js. Я не вижу ничего похожего в документации. Как мне этого добиться?
javascript
underscore.js
Рахул
источник
источник
sortBy
функция может быть,return -n
но это не сработает для строк; отсюда вопрос о том, какие вещи вы сортируете._.sortBy([1,4,3,2]).reverse()
или как,_.chain([1,4,3,2]).sortBy().reverse().value()
если вы не хотите использоватьreverse()
прототип Array.Ответы:
Вы можете использовать
.sortBy
, он всегда вернет список по возрастанию :Но вы можете использовать метод .reverse, чтобы получить его по убыванию :
Или при работе с числами добавьте отрицательный знак к возврату, чтобы убрать список:
Под капотом
.sortBy
используются встроенные.sort([handler])
:источник
.sortBy()
называются встроенные функцииArray.sort()
, алгоритм которых зависит от производителей браузеров, но пузырьковая сортировка вряд ли будет их выбором._.sortBy(arr, function)
, я предполагаю, что он зацикливается на каждом элементе и выполняет некоторую логику, чтобы вернуть отсортированный массив. Затем, когда вы вызываетеArray.prototype.reverse()
его, вероятно, снова зацикливается на каждом элементе и выполняет некоторую логику для возврата обращенного массива. Таким образом, вы зацикливаете массив дважды.По убыванию, используя подчеркивание, можно сделать, умножив возвращаемое значение на -1.
Если вы сортируете по строкам, а не по номерам, вы можете использовать метод charCodeAt (), чтобы получить значение Юникода.
источник
В обратном методе массива прототип изменяет массив и возвращает ссылку на него, что означает , что вы можете сделать это:
Также подчеркивающая документация гласит:
это означает, что вы также можете использовать
.reverse()
во время цепочки:источник
_.sortBy(collection, item => item. propertyName.toLowerCase());
По аналогии с библиотекой Underscore есть еще одна библиотека с именем lodash, в которой есть один метод orderBy, который принимает параметр для определения порядка сортировки. Вы можете использовать его как
По какой-то причине, это не задокументировано на сайте документации.
источник
orderBy
супер полезно! Гораздо лучше, чем использование reverse, поскольку он сохраняет свойство стабильной сортировки, которое я ищу.Подчеркни Миксин
Расширяя ответ @ emil_lundberg, вы также можете написать «mixin», если вы используете Underscore для создания пользовательской функции для сортировки, если это своего рода сортировка, которую вы могли бы повторить в приложении где-нибудь.
Например, может быть, у вас есть контроллер или просмотр результатов сортировки с порядком сортировки «ASC» или «DESC», и вы хотите переключаться между ними, вы можете сделать что-то вроде этого:
Mixin.js
Пример использования
Вот JSFiddle, демонстрирующий это: JSFiddle для SortBy Mixin
источник