Sort Functions

Overview of Ramda's sorting functions. (4 min. read)

We'll cover the following

Sort Functions

The native sort is destructive, meaning it mutates the array.

const nums = [3, 2, 4, 1];
const result = nums.sort((a, b) => a - b)
console.log({ nums, result });

Ramda provides a non-destructive sort function.

import { sort } from 'ramda';
const nums = [3, 2, 4, 1];
const result = sort((a, b) => a - b, nums);
console.log({ nums, result });

sortBy applies a function to your values before comparing them. Sorting by absolute value, for example, is trivial now.

import { sortBy } from 'ramda';
const result = sortBy(Math.abs, [-100, 1, -50, 0]);
console.log({ result });

If you’d like to sort by multiple criteria, sortWith is your friend. This example sorts people by their age, then name.

import { ascend, prop, sortWith } from 'ramda';
const people = [{
name: 'Bobo',
age: 25
}, {
name: 'Cam',
age: 25
}, {
name: 'Al',
age: 29
}];
const result = sortWith([
ascend(prop('age')),
ascend(prop('name'))
], people);
console.log({ result });

Ramda’s ascend functions wraps around prop('age'), telling it “Sort by age, ascending (smallest first)”.

ascend(prop('age'))

Same with prop('name'): “Sort by name, ascending (A, B, C, D…).”

ascend(prop('name'))

So if they’re the same age, sortWith will then sort by name.

For the opposite effect, use descend.

import { descend, prop, sortWith } from 'ramda';
const people = [{
name: 'Bobo',
age: 25
}, {
name: 'Cam',
age: 25
}, {
name: 'Al',
age: 29
}];
const result = sortWith([
descend(prop('age')),
descend(prop('name'))
], people);
console.log({ result });

Now people's sorted in opposite order.