Skip to content

Alphabetically sort an array of strings

License

Notifications You must be signed in to change notification settings

sindresorhus/alpha-sort

Repository files navigation

alpha-sort

Alphabetically sort an array of strings

With correct sorting of unicode characters. Supports natural sort order with an option.

Install

$ npm install alpha-sort

Usage

import alphaSort from 'alpha-sort';

['b', 'a', 'c'].sort(alphaSort());
//=> ['a', 'b', 'c']

['b', 'a', 'c'].sort(alphaSort({descending: true}));
//=> ['c', 'b', 'a']

['B', 'a', 'C'].sort(alphaSort({caseInsensitive: true}));
//=> ['a', 'B', 'C']

['file10.txt', 'file2.txt', 'file03.txt'].sort(alphaSort({natural: true}));
//=> ['file2.txt', 'file03.txt', 'file10.txt']

API

alphaSort(options?)

Get a comparator function to be used as argument for Array#sort.

options

Type: object

descending

Type: boolean
Default: false

Whether or not to sort in descending order.

caseInsensitive

Type: boolean
Default: false

Whether or not to sort case-insensitively.

Note: If two elements are considered equal in the case-insensitive comparison, the tie-break will be a standard (case-sensitive) comparison. Example:

import alphaSort from 'alpha-sort';

['bar', 'baz', 'Baz'].sort(alphaSort({caseInsensitive: true}));
//=> ['bar', 'Baz', 'baz']
natural

Type: boolean
Default: false

Whether or not to sort using natural sort order (such as sorting 10 after 2).

Note: If two elements are considered equal in the natural sort order comparison, the tie-break will be a standard (non-natural) comparison. Example:

import alphaSort from 'alpha-sort';

['file10.txt', 'file05.txt', 'file0010.txt'].sort(alphaSort({natural: true}));
//=> ['file05.txt', 'file0010.txt', 'file10.txt']
preprocessor

Type: function
Default: undefined

A custom function that you can provide to manipulate the elements before sorting. This does not modify the values of the array; it only interferes in the sorting order.

This can be used, for example, if you are sorting book titles in English and want to ignore common articles such as the, a or an:

import alphaSort from 'alpha-sort';

['The Foo', 'Bar'].sort(alphaSort({
	preprocessor: title => title.replace(/^(?:the|a|an) /i, '')
}));
//=> ['Bar', 'The Foo']

Note: If two elements are considered equal when sorting with a custom preprocessor, the tie-break will be a comparison without the custom preprocessor.

Related