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