tree:

sort(tree, [options])

Returns a copy of the indicated treelike object with the keys sorted. The sort is performed with the default lexicographic Unicode sort order provided by JavaScript’s Array.sort() method.

$ cat capitals.yaml
Japan: Tokyo
Turkey: Ankara
Australia: Canberra
Spain: Madrid
$ ori sort capitals.yaml
Australia: Canberra
Japan: Tokyo
Spain: Madrid
Turkey: Ankara
g Japan Tokyo ->Japan Japan Turkey Ankara ->Turkey Turkey Australia Canberra ->Australia Australia Spain Madrid ->Spain Spain
g Australia Canberra ->Australia Australia Japan Tokyo ->Japan Japan Spain Madrid ->Spain Spain Turkey Ankara ->Turkey Turkey
Input tree
With keys sorted

Options

The sort built-in takes an optional options argument. This can take the form of an object containing any or all of:

  • compare. A function that compares two arguments. This uses the same definition as the JavaScript Array sort() method. If omitted, items are converted to strings and sorted as strings.
  • sortKey. A function evaluated for each entry in the tree to determine a sort key. See below.

The default compare function sorts text strings by their Unicode character values. If you are sorting things for display to end users, consider using naturalOrder as the compare function.

As a shorthand, if you supply a function as the second argument to sort, it will be used as the sortKey function.

To reverse the sort order, apply sort and then reverse.

Sort keys

As shown in the example above, by default sort sorts a tree by its keys. You can supply a sortKey option that returns a different value that the tree should be sorted by. This function will be called with three arguments: the value being considered, the key for that value, and the tree being sorted. You don’t have to use all three arguments.

$ cat capitals.yaml
Japan: Tokyo
Turkey: Ankara
Australia: Canberra
Spain: Madrid
$ ori "sort capitals.yaml, (value, key, tree) => value"
Turkey: Ankara
Australia: Canberra
Spain: Madrid
Japan: Tokyo
g Japan Tokyo ->Japan Japan Turkey Ankara ->Turkey Turkey Australia Canberra ->Australia Australia Spain Madrid ->Spain Spain
g Turkey Ankara ->Turkey Turkey Australia Canberra ->Australia Australia Spain Madrid ->Spain Spain Japan Tokyo ->Japan Japan
Input tree
With values sorted