In JavaScript, you can sort an array using the sort() method. The default sort order is ascending, built upon converting the elements into strings, then comparing their sequences of UTF-16 code units' values, as stated on MDN.

This means if you want to sort an array of numbers in ascending order, you can't just use the default sort order. It will give you an unexpected result:

const numbers = [80, 1000, 9];

numbers.sort(); // [1000, 80, 9]

Instead, you need to supply a callback function. If a is less than b, the function should return a negative number. If a is greater than b, the function should return a positive number. If a is equal to b, the function should return zero:

numbers.sort(function (a, b) {
// If a is less than b
if (a < b) {
return -1;
}

// If a is greater than b
if (a > b) {
return 1;
}

// If a is equal to b
return 0;
});

// Result: [9, 80, 1000]

You can shorten this by simply subtracting b from a:

// Traditional function expression
numbers.sort(function (a, b) {
return a - b;
});

// Or...

// Arrow function expression
numbers.sort((a, b) => a - b);

// Either way, the result is still [9, 80, 1000]

This makes sense when you think about it:

  • If a === 1 and b === 2, then (a - b) === (1 - 2) === -1.
  • If a === 2 and b === 1, then (a - b) === (2 - 1) === 1.
  • If a === 1 and b === 1, then (a - b) === (1 - 1) === 0.

It's the same as writing the function in the long form.