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

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

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

Результат:

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

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

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

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

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

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

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

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 ↓
Development на JavaScript
Скролл вверх и вниз
Определить ширину экрана
Определить тип элемента
Mocha Framework - тестирование JavaScript
TicTacToe
Errors

Article author: Andrei Olegovich

Related articles

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: