Метод sort сортирует имеющийся объект Array; нового объекта
Array не создается.
Если указать функцию в аргументе sortFunction, она должна возвращать одно из следующих значений:
К примеру есть массив var arr = [2, 8, 5];. Если вызвать метод с 0 и -1 результат будет одинаковым.
var firstArr = [2, 8, 5],
secondArr = [2, 8, 5];
firstArr.sort(function(){
return -1;
});
secondArr.sort(function(){
return 0;
});
console.log(firstArr, secondArr);
Какая разница между -1 и 0?
Update: Какая практическая необходимость в 0 и -1, если конечный результат ихний говорит о том, что сортировка не требуется. Почему просто не сделать a > b ? 1 : 0? Приведите пожалуйста практический пример, где отсутствие третьего значение (0 или -1) приведет к ошибки в сортировке, что бы можно было понять их практическую принадлежность в работе метода.
Разница между -1 и 0 - один :).
Возвращая -1, Вы говорите, что первый элемент всегда меньше второго. Порядок подачи элементов массива как параметров в функцию sort - очевидно соответствует их относительному положению в массиве. Pезультат - сортировка не требуется.
Возвращая ноль, Вы говорите, что все элементы одинаковые - сортировка не требуется.
Update
А-а-а, может, Вы пока не понимаете, как правильно писать функции sort? У этой функции должно быть два параметра, возвращать значение она должна в зависимости от этих параметров, а вызывается она алгоритмом, когда ему надо сравнить два элемента массива.
var arr1 = [2, 8, 5],
arr2 = [2, 8, 5];
arr1.sort(function(a, b){
return a - b;
});
console.log("ascending:", arr1);
arr2.sort(function(a, b){
return b - a;
});
console.log("descending:", arr2);
Не все браузеры используют устойчивую сортировку(где необходимое условие как раз что а и b могут оставаться неизменными),поэтому при сравнении следует возвращать ноль.Представьте у Вас два элемента и они равны друг другу,как Вы их сравните?В худшем случае получится петля.Поэтому,чтобы везде работало корректно, стоит делать как описано в спецификации.
Попробуйте в Chrome,при последующих сортировках элемент в центре будет перемещаться.
<div id=test>
<div>B</div>
<div>D</div>
<div>A</div>
<div>C</div>
<div>E</div>
<div>B</div>
<div>D</div>
<div>A</div>
<div>C</div>
<div>E</div>
<div>B</div>
<div>D</div>
<div>A</div>
<div>C</div>
<div>E</div>
</div>
JS:
<input type=button value="Sort" onclick="dosort()">
var firsttime = true;
function dosort() {
var elements = document.getElementById('test').children;
var sortMe = [];
for (var i=0; i<elements.length; i++)
sortMe.push(elements[i]);
sortMe.sort(function(a, b) {
if (firsttime) {
if (a.innerText < b.innerText) return -1;
if (a.innerText > b.innerText) return 1;
else return 0;
} else {
return 0;
}
});
var parent = document.getElementById('test');
parent.innerHTML = "";
for(var i = 0, l = sortMe.length; i < l; i++) {
parent.appendChild(sortMe[i]);
}
firsttime=false;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости