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

Содержание
Введение
Правильная сортировка
Сортировка по убыванию
Похожие статьи

Введение

Для сортировки массивов в JavaScript используется метод .sort.

Однако сортировка чисел происходит по первому символу, то есть 1000 меньше чем 2, похожая сортировка происходит в MS Excel

const numbers = [1,67,200, 3, 50, 400]; console.log(numbers); val = numbers.sort(); console.log(val);

Результат:

[1, 67, 200, 3, 50, 400]
[1, 200, 3, 400, 50, 67]

Правильная сортировка

Чтобы сортировать по величине числа нужно добавить в sort аргумент в виде функции двух переменных

const numbers = [1, 67, 200, 3, 50, 400]; console.log(numbers); val2 = numbers.sort(function(x,y){ return y - x; }); console.log(val2);

Результат:

[1, 67, 200, 3, 50, 400]
[1, 3, 50, 67, 200, 400]

Что происходит при этой сортировке:

Из массива выбираются два числа, сперва обычно первое и второе.

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

Если функция возвравщает ноль то ничего не меняется.

Если функция возвращает отрицательное значение, то индекс первого сравниваемого элемента (числа которое x) в массиве уменьшается (оно двигается влево) а у второго увеличивается.

Чтобы наглядно в этом убедиться добавим логов

const numbers = [1,67,200, 3, 50, 400]; console.log(numbers); val2 = numbers.sort(function(x,y){ console.log(x,y,x-y); return x - y; }); console.log(val2);

Результат:

[1, 67, 200, 3, 50, 400]
67 1 66
200 67 133
3 200 -197
3 67 -64
3 1 2
50 67 -17
50 3 47
400 50 350
400 200 200
[1, 3, 50, 67, 200, 400]

Из логов видно, какие числа сравниваются.

Сортировка по убыванию

Для наглядности можно сделать сортировку по убыванию

const numbers = [1,67,200, 3, 50, 400]; console.log(numbers); val2 = numbers.sort(function(x,y){ console.log(x,y,y-x); return y - x; }); console.log(val2);

Результат:

[1, 67, 200, 3, 50, 400] 67 1 -66 200 67 -133 3 200 197 3 67 64 3 1 -2 50 3 -47 50 67 17 400 50 -350 400 67 -333 400 200 -200 [400, 200, 67, 50, 3, 1]

Похожие статьи
JavaScript
Массивы
Сортировка массива