universal-string-sort
Version:
Universal string sorting with locale support, numbers, case, diacritics, and punctuation handling.
30 lines (27 loc) • 1.11 kB
JavaScript
/**
* Universal string sorting function.
*
* Features:
* - Locale-aware (via ICU through Intl.Collator)
* - Handles numbers inside strings ("file2" < "file10")
* - Case sensitivity control
* - Diacritic sensitivity (e.g., é vs e)
* - Punctuation handling
*
* @param {string[]} arr - array of strings to sort
* @param {string|string[]} [locales='und'] - locale or list of locales ('ru', 'en', ['de','sv'])
* @param {Object} [options] - sorting options
* @param {('base'|'accent'|'case'|'variant')} [options.sensitivity='variant'] - comparison sensitivity
* @param {boolean} [options.ignorePunctuation=true] - whether to ignore punctuation
* @param {boolean} [options.numeric=true] - whether to sort numbers as numbers
* @returns {string[]} - sorted array
*/
export function universalSort(arr, locales = 'und', options = {}) {
const collator = new Intl.Collator(locales, {
sensitivity: options.sensitivity || 'variant',
ignorePunctuation: options.ignorePunctuation !== false,
numeric: options.numeric !== false,
usage: 'sort'
});
return [...arr].sort(collator.compare);
}