Из-за того, что ECMA стандарт охватывает около сортировки массивов (в очень упрощенном виде) :
- Если в сравнении получено 1 A, опуститесь на одну позицию.
- Если принимается -1, сохраните позицию и определите старшее ранжирование в направлении B.
- Если получено 0, ничего не делает.
Самый безопасный способ гарантировать такое же поведение во всех браузере:
// descending order
abc =[10,2,4,1];
abc.sort(function(a , b){
return a > b ? -1 : 1;
});
// ascending order
abc.sort(function(a , b){
return a > b ? 1 : -1;
});
Для примитивных объектов Возможное использование короткой версии
// descending order
abc.sort(function(a , b){
return b - a;
});
// ascending order
abc.sort(function(a , b){
return a - b;
});
для объектов, таких как:
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 27 },
{ name: 'And', value: 31 },
{ name: 'The', value: -12 },
{ name: 'Zeros', value: 37 },
{ name: 'Magnetic', value: 37 }
Правильный путь:
items.sort(function(a , b){
var result = a == b ? 0 : b > a ? -1 : 1
if(result === 0)
{
// implement a tight break evaluation
}
return result ;
});
Это правильный путь, поскольку способ, которым выполняет итератор браузера, не определен в стандарте ECMA, и браузер может выполнять итерацию по-разному. Например, большинство браузеров повторяются сверху вниз, но хром выполняет итерацию 1-го элемента с последним и продвигается вверх. Таким образом, в случае жесткости может возникнуть другой результат большинства браузеров.
такое же решение не работает, если дата сортировки в таком формате «мм/дд/гггг» –