Сортировка Javascript массива


#1

Народ, пытался отсортировать массив с помощью метода sort, почему то он не правильно отсортировал, на первом месте 1, потом 12 затем 14 а потом уже почему то 2, подскажите почему так? Что сделать что бы нормально сортировало??


#2

Дело в том что в js метод sort если не передавать ему свой порядок сортировки, по умолчанию будет сортировать преобразовывая элементы к строке, если смотреть по такой логике то конечно всё верно, для того что бы был свой порядок сортировки, нужно передать функцию, которая принимает два элемента и может сравнить их, сам механизм может сравнивать что угодно, но ему нужно немного помочь, он должен знать как сравнивать, для этого мы и создаем и передаем функцию в этот метод, как то так:

function compareNumericValues(a, b) {
if (a > b) return 1;
if
(a < b) return -1;
}

var array = [ 11, 12, 15, 1, 3, 5 ];

array.sort(compareNumericValues);

alert(array);

Теперь сортировка будет проходить правильно, и порядок будет такой: 1,3,5,11,12,15. Собственно ничего сложного. Самое главное, что функция которая будет описывать механизм сравнения, должна принимать два аргумента,и возвращать значения типа один или минус один в разных случаях сравнения, можно так же возвращать ноль в случае равенства.

Кстати, один интересный факт, в методе sort(), внутри интерпретатора JavaScript реализован универсальный алгоритм сортировки, и это быстрая сортировка, оптимизировання конечно для работы с не большими массивами