По умолчанию метод sort сортирует массив в алфавитном порядке, для этого он представляет каждое значение элемента массива как строку с помощью метода toString().

Например, сортировка массива, состоящего из чисел:

var arrNumbers = new Array (50,4,1,76,20,3,27,5,501);
document.write("Исходный массив:");
document.write("<br>");
document.write(arrNumbers.join(", "));
document.write("<br>");
arrNumbers.sort();
document.write("Отсортированный массив:");
document.write("<br>");
document.write(arrNumbers.join(", "));

Сортировка массива в JavaScript

Чтобы отсортировать массив так, как мы хотим, нам необходимо написать специальную функцию и передать её имя в качестве параметра методу sort.

Но перед тем как перейти к созданию функции, давайте рассмотрим алгоритм, с помощью которого метод sort упорядочивает массив. На самом деле алгоритм сортировки очень прост и заключается в многократном сравнении 2 рядом расположенных элементов в массиве, которые в зависимости от результата сравнения переставляются (упорядочиваются).

Следовательно, специальная функция должно иметь 2 параметра. Причём передавать значения этих параметров будет сам метод sort, т.е. значения параметров нам не известны. А для нас это и не важно, т.к. наша задача сводится к написанию алгоритма сравнения значений этих параметров и выдаче в качестве результата значения, по которому метод sort будет определять, переставлять эти элементы массива или нет.

Т.е. метод sort определяет, переставлять элементы или нет в зависимости от результата, которая возвращает данная функция. Рассмотрим, какие значения должна возвращать функция:

  • Если функция возвращает 0, то данные элементы массива равны;
  • Если функция возвращает 1 (или больше 0), то это означает что первый элемент массива больше второго;
  • Если функция возвращает -1 (или меньше 0), то это означает что второй элемент массива больше первого.

После создания функции, её необходимо передать в качестве параметра методу sort. Причём передавать необходимо только название этой функции, без заключения её в кавычки и без указания круглых скобочек. Это всё объясняется тем, что мы не просим метод sort вызвать эту функцию прямо сейчас, а просто сообщаем данному методу, чтоб он именно её использовал при сравнении элементов массива, т.е. как бы подменяем его стандартную функцию для сортировки массива на функцию, заданную ему в качестве параметра.

Например, напишем функцию для сортировки чисел:

//Функция для сравнения чисел, которая возвращает:
//    0 - числа равны;
//    1 - первое число больше второго числа
//   -1 - второе число больше первого числа
function compareNumbers(n1,n2)
{
  if (n1==n2) return 0;
  if (n1>n2)
    return 1;
  else 
    return -1;
}
var arrNumbers = new Array (50,4,1,76,20,3,27,5,501);
document.write("Исходный массив:");
document.write("<br>");
document.write(arrNumbers.join(", "));
document.write("<br>");
arrNumbers.sort(compareNumbers);
document.write("Отсортированный массив:");
document.write("<br>");
document.write(arrNumbers.join(", "));

Сортировка массива с помощью функции в JavaScript

Таким образом, используя специальную функцию, Вы можете заставить метод sort отсортировать массив по указанному в данной функции алгоритму.

Например, сортировка числового массива в обратном порядке:

//Функция для сравнения чисел, которая возвращает:
//    0 - числа равны;
//    1 - первое число больше второго числа
//   -1 - второе число больше первого числа
function compareNumbers(n1,n2)
{
  if (n1==n2) return 0;
  if (n1<n2)
    return 1;
  else 
    return -1;
}
var arrNumbers = new Array (50,4,1,76,20,3,27,5,501);
document.write("Исходный массив:");
document.write("<br>");
document.write(arrNumbers.join(", "));
document.write("<br>");
arrNumbers.sort(compareNumbers);
document.write("Отсортированный массив:");
document.write("<br>");
document.write(arrNumbers.join(", "));

Сортировка массива в обратном порядке на языке JavaScript