Если функция сравнения предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:
Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.
Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам.
Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.
Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
Итак, функция сравнения имеет следующую форму:
function compare(a, b) {
if (a меньше b по некоторому критерию сортировки) {
return -1;
}
if (a больше b по некоторому критерию сортировки) {
return 1;
}
// a должно быть равным b
return 0;
}
Для числового сравнения, вместо строкового, функция сравнения может просто вычитать b из a. Следующая функция будет сортировать массив по возрастанию:
function compareNumbers(a, b) {
return a - b;
}
Метод sort можно удобно использовать с функциональными выражениями (и замыканиями):
Объекты могут быть отсортированы по значению одного из своих свойств.