Книга: JavaScript. Подробное руководство, 6-е издание
7.8.3. Метод sort()
7.8.3. Метод sort()
Метод Array.sort()
сортирует элементы в исходном массиве и возвращает отсортированный массив. Если метод sort()
вызывается без аргументов, сортировка выполняется в алфавитном порядке (для сравнения элементы временно преобразуются в строки, если это необходимо):
var а = new Array("banana", "cherry", "apple");
a.sort();
var s = a.join(", ”); // s == "apple, banana, cherry"
Неопределенные элементы переносятся в конец массива.
Для сортировки в каком-либо ином порядке, отличном от алфавитного, методу sort()
можно передать функцию сравнения в качестве аргумента. Эта функция устанавливает, какой из двух ее аргументов должен следовать раньше в отсортированном списке. Если первый аргумент должен предшествовать второму, функция сравнения должна возвращать отрицательное число. Если первый аргумент должен следовать за вторым в отсортированном массиве, то функция должна возвращать число больше нуля. А если два значения эквивалентны (т. е. порядок их следования не важен), функция сравнения должна возвращать 0. Поэтому, например, для сортировки элементов массива в числовом порядке можно сделать следующее:
var а = [33, 4, 1111, 222];
a.sortO; // Алфавитный порядок: 1111, 222, 33, 4
a.sort(function(a,b) { // Числовой порядок: 4, 33, 222, 1111
return a-b; // Возвращает значение < 0, 0 или > 0
}); //в зависимости от порядка сортировки а и b
a.sort(function(a,b) {return b-a}); // Обратный числовой порядок
Обратите внимание, насколько удобно использовать в этом фрагменте неименованную функцию. Функция сравнения используется только здесь, поэтому нет необходимости давать ей имя.
В качестве еще одного примера сортировки элементов массива можно реализовать сортировку массива строк без учета регистра символов, передав функцию сравнения, преобразующую свои аргументы в нижний регистр (с помощью метода toLowerCase()
) перед сравнением.
а = ['ant', 'Bug', 'cat', 'Dog']
a.sort(); // сортировка с учетом регистра символов: [ 'Bug', 'Dog', 'ant', 'cat' ]
a.sort(function(s,t) { // Сортировка без учета регистра символов
var а = s.toLowerCase();
var b = t.toLowerCase();
if (a < b) return -1;
if (a > b) return 1;
return 0;
}); //=>['ant','Bug','cat'.'Dog']
- Tabbed Browsing, Sort Of
- 6.2.1. Сортировка: qsort()
- Sorting
- Пример: перенос программы sortMM (программа 5.5)
- sort_heap
- Элемент xsl:sort
- Set operations on sorted ranges
- Метод Sorted
- Sorting and Merging
- Sorted Associative Container
- Unique Sorted Associative Container
- Multiple Sorted Associative Container