Ответ 1
Это кажется стандартным, возвращает отрицательное, положительное или нулевое число.
myArray.sort ( function( a , b ){
return a-b;
});
Есть ли способ сортировки массива с помощью Chrome?
Использование функции сортировки не работает в этом примере:
var myArray = [1,4,5,3,2];
myArray.sort ( function( a , b ){
return b>a
});
for ( var i = 0; i < myArray.length; i++ )
{
document.write( myArray[i] )
}
Выход Firefox/IE/Opera/Safri: 54321
Выход Chrome: 53241
Спасибо за ваше время!
Это кажется стандартным, возвращает отрицательное, положительное или нулевое число.
myArray.sort ( function( a , b ){
return a-b;
});
Поведение Chrome верное:)
Стандарты ECMA требуют, чтобы функция передавалась sort(), чтобы вернуть число больше 0, меньше 0 или равно 0. Однако функция, которую вы определили, возвращает true/false. Стандарты ECMA указывают, что для функции, которая не ведет себя так, как ожидалось, реализация зависит от клиента.
Из-за того, что стандарт ECMA распространяется на сортировочные массивы (очень упрощенным способом):
Самый безопасный способ гарантировать одинаковое поведение во всех браузерах:
// 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-го элемента с последним и продвигается вверх. Таким образом, в случае сбоя может возникнуть другой результат большинства браузеров.
Я думаю, правильная причина здесь: Сортировка массива объектов в Chrome, а именно этот пост.
Прочитайте, что, если вы чувствуете необходимость реализовать свою собственную функцию сортировки массива, вы можете взглянуть на: http://en.literateprograms.org/Merge_sort_%28JavaScript%29