Народ, пытался отсортировать массив с помощью метода sort, почему то он не правильно отсортировал, на первом месте 1, потом 12 затем 14 а потом уже почему то 2, подскажите почему так? Что сделать что бы нормально сортировало??
Народ, пытался отсортировать массив с помощью метода sort, почему то он не правильно отсортировал, на первом месте 1, потом 12 затем 14 а потом уже почему то 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 реализован универсальный алгоритм сортировки, и это быстрая сортировка, оптимизировання конечно для работы с не большими массивами