Рамда имеет несколько различных возможностей сортировки.
Наиболее знакомым является sort
, который по сути является не мутантной версией чистой функции метода Array.prototype.sort
. Вы передаете ему компаратор: двоичная функция, которая должна возвращать число. Если число отрицательное, первый аргумент опережает второй в результате; если он положительный, второй аргумент опережает первый; если оно равно нулю, у вас express нет предпочтений, хотя большинство реализаций в наши дни стабильны, что означает, что первый аргумент появится вперед.
sortWith
- это способ объединения нескольких таких компараторов. Если вы хотите отсортировать по фамилии и - если они совпадают - по имени, вы можете передать компаратор фамилии и имя, и он будет сортироваться по вашему желанию.
Чтобы помочь создать такие функции компаратора, Ramda также предлагает ascend
и descend
, которые принимают функцию, которая возвращает упорядоченный тип, такой как встроенные типы String, Number и Date, или что-либо с соответствующим valueOf
метод и возвращает компаратор, который можно передать в sort
. Таким образом, если у каждого объекта, который вы хотите отсортировать, есть свойство numberri c age
, вы можете отсортировать их, уменьшив возраст, передав descend(o => o.age)
(эквивалентно descend(prop('age'))
) в R.sort
или Array.prototype.sort
или - как один из множества компараторов - до R.sortWith
.
Но достаточно часто нам хотелось бы чего-то попроще. Я просто хочу отсортировать их по коду типа . Для простейших случаев Рамда предлагает sortBy
, который не использует компаратор, а просто функцию, которая возвращает что-то упорядоченного типа. Чаще всего это используется простым извлечением свойства из вашего объекта: sortBy(prop('type'))
, но вы можете делать любые преобразования, какие захотите.
Но нет эквивалента ascend
/ descend
для sortBy
, Хотя, конечно, что-то подобное можно написать, оно уже покрыто sort(a/descend(myFunc))
.