Generator sort
Sorting on multiple criteria with generator functions
Background
With the Array.sort() method in javascript, it is possible to sort an array of anything based on a sorting function. For example, if you have an array of objects like this:
let characters = firstName: 'Luke' lastName: 'Skywalker' firstName: 'Han' lastName: 'Solo' firstName: 'Anakin' lastName: 'Skywalker'
And you want to sort them based on lastName first and then firstName, you have to write a sort-function like this:
characters
Writing these sorting functions is not particularly difficult, but they can become quite long and rarely look elegant.
Sorting with generator functions
With the sort-generator module, the same sort can be written as
characters
The sortFunction
function takes a generator function as its only argument.
The generator function will be called for each pair of object that shall be compared.
The function shall yield numbers.
If it yields a positive number,
oA is larger than oB.
If it yields a negative number,
oB is larger than oA.
If it yields 0,
it will be asked to yield another number until it yields a non-zero
number or is done (i.e. returns).
This makes it easy to write the comparison as a series of yield statements.
Typescript
The module is written in typescript and comes with complete typings, but can be used in plain javascript as well.