@soulmatesneverdie

Функция сортировки массива в js?

Рассматриваю метод sort(fn) для сортировки массива. В учебнике говорится о том, что без fn - массивы сравниваются как строки. Для того,чтобы задать свой порядок сортировки нужно указать функцию.
Например, массив = [1,2,15]. Для правильной его сортировки пишут такую функцию
function compareNumeric(a, b) {
  if (a > b) return 1;
  if (a < b) return -1;
}

var arr = [ 1, 2, 15 ];

arr.sort(compareNumeric);

alert(arr);  // 1, 2, 15


Объясните, пожалуйста, новичку, что мы делаем в строке функции, где if и return, что порядок сортировки у нас меняется на правильный ( по порядку ).
  • Вопрос задан
  • 2197 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
в документации на MDN неплохо описано назначение сортировочной функции:
Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.

Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).

Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.

Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Не "массивы сравниваются как строки", а элементы массива сравниваются как строки.
Это значит, что без определения функции сортировки массив [1, 2, 15] будет рассматриваться как ['1', '2', '15'], и, соответственно, отсортируется как ['1', '15', '2'].
Если же функция сравнения элементов определена явно, то результат сортировки зависит от того, как в этой функции определено соотношение больше-равно-меньше между двумя аргументами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы