Сортировка массива в 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 | |
Массивы | |
Сортировка массива |