Как указывает Аадит М Шах в комментариях, вы не используете sortBy
правильно.
Вот краткий обзор того, как сортировать в Ramda:
рода
Возвращает копию списка, отсортированного в соответствии с функцией сравнения, которая должна принимать два значения за раз и возвращать отрицательное число, если первое значение меньше, положительное число, если оно больше, и ноль, если они равны. .
В одном случае используйте subtract
для сортировки в порядке возрастания:
sort(subtract, [4, 1, 2, 3]);
//=> [1, 2, 3, 4]
Или для сортировки по убыванию, просто flip
it:
sort(flip(subtract), [4, 1, 2, 3]);
//=> [4, 3, 2, 1]
sort
просто ожидает функцию, которая может принимать два параметра, которые можно сравнить с <
или >
.
Так как бы вы отсортировали массив строк? Строки можно сравнить с <
или >
, но использование subtract
не имеет смысла. Вот где ascend
(или descend
) могут быть полезны:
Делает функцию восходящего компаратора из функции, которая возвращает значение, которое можно сравнить с <и>.
sort(ascend(identity), ["b", "a", "B", "A"]);
//=> ["A", "B", "a", "b"]
А если вы хотите сделать сравнение без учета регистра:
sort(ascend(toLower), ["b", "a", "B", "A"]);
//=> ["a", "A", "b", "B"]
SortBy
Как мы видели, sort
ожидает, что вы предоставите ему функцию, которая принимает два параметра, которые можно сравнивать друг с другом, используя <
или >
. Числа и строки можно сравнить с этими операторами, поэтому, если вы можете передать их Рамде напрямую, тогда:
sortBy(identity, [4, 1, 2, 3]);
//=> [1, 2, 3, 4]
совпадает с:
sort(subtract, [4, 1, 2, 3]);
//=> [1, 2, 3, 4]
Однако, насколько я могу судить, sortBy
всегда будет сортировать вещи в порядке возрастания.
sortWith
Вы используете sortWith
, когда у вас может быть несколько критериев сортировки:
- Сортировка по возрасту в порядке возрастания
- Сортировать по имени в порядке убывания
sortWith([ascend(prop('age')), descend(prop('name'))], [
{age: 40, name: 'John'},
{age: 40, name: 'Zack'},
{age: 10, name: 'Liam'},
{age: 20, name: 'Bill'}
]);
//=> [
//=> {age: 10, name: "Liam"},
//=> {age: 20, name: "Bill"},
//=> {age: 40, name: "Zack"},
//=> {age: 40, name: "John"}
//=> ]