Sorting strings with JS (properly)

It seems like such a basic task – how to sort a list of strings alphabetically.

The easiest way, and what you’d probably stumble across first, is a simple sort function:


Or using the sort() function and passing a compare function:

arr.sort((a, b) => a > b);

Or sorting on object property:

arr.sort(function(a, b) {
  if( > return -1; 
  if( > return 1;
  return 0;

This is the most common answer when searching Google/Stack Overflow on how to sort an array. It works for simple strings, however you can quickly run into issues when numbers get involved where 10 can appear before 2 etc. And then there are special characters and languages other than English – what determines where they appear in an alphabetical list?

It’s not easy to find this answer – is it assumed knowledge? I quickly discovered a bunch of highly complicated sorting functions that people had glued together on Stack Overflow. But I thought surely there is a simpler way for such a basic and common task.

Intl.Collator to the rescue

JavaScript has an Internationalisation API called Intl (MDN) which provides tools for sorting text (among many other things) in a specific language, and taking into account letter case, numbers and special characters.

You first need to create a Collator object using Intl.Collator:

let collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });

A locale can be provided as the first argument (where I have used ‘undefined’) to specify a language other than the default (see Collator in MDN)

Once we have the collator we can use its ‘compare’ function in the Array.sort:

let arr = [
  "First item",
  "The second item",
  "Item 3"

Or if you need to compare a property on an object:

let arr = [
  {name: "First item" },
  {name: "The second item" },
  {name: "Item 3" }
arr.sort((a, b) =>,;
Posted toJavascript