sort()
Метод Array.sort()
сортирует элементы в исходном массиве и возвращает отсортированный массив. Если метод sort()
вызывается без аргументов, сортировка выполняется в алфавитном порядке (для сравнения элементы временно преобразуются в строки, если это необходимо):
var a = new Array("banana", "cherry", "apple");
a.sort();
var s = a.join(", "); // s == "apple, banana, cherry"
Неопределенные элементы переносятся в конец массива.
_________________________
Для сортировки в каком-либо ином порядке, отличном от алфавитного, методу sort()
можно передать функцию сравнения в качестве аргумента. Эта функция устанавливает, какой из двух ее аргументов должен следовать раньше в отсортированном списке.
Если первый аргумент должен предшествовать второму, функция сравнения должна возвращать отрицательное число. Если первый аргумент должен следовать за вторым в отсортированном массиве, то функция должна возвращать число больше нуля.
Если два значения эквивалентны (т.е. порядок их следования не важен), функция сравнения должна возвращать 0.
Поэтому, например, для сортировки элементов массива в числовом порядке можно сделать следующее:
var a = [33, 4, 1111, 222];
a.sort(); // Алфавитный порядок: 1111, 222, 33, 4
a.sort(function(a,b) { // Числовой порядок: 4, 33, 222, 1111
return a - b; // Возвращает значение < 0, 0 или > 0
}); // в зависимости от порядка сортировки a и b
a.sort(function(a,b) {return b - a}); // Обратный числовой порядок
__________________
Или более подробно на еще одном примере:
function compareNumeric(a, b) {
}
var arr = [ 1, 2, 15 ];
arr.sort(compareNumeric);
console.log(arr); // 1, 2, 15
Как видно из примера выше, функция, передаваемаяsort
, должна иметь два аргумента.
Алгоритм сортировки, встроенный в JavaScript, будет передавать ей для сравнения элементы массива. Она должна возвращать:
- Положительное значение, если
a > b
- Отрицательное значение, если
a < b
- Если равны – можно
0
, но вообще – не важно, что возвращать, если их взаимный порядок не имеет значения.