Array.sort () сохранит порядок массива, где это возможно? - PullRequest
2 голосов
/ 03 февраля 2009

Полагаю, это зависит от того, как это реализовано. Я был бы рад, если бы кто-нибудь вернулся и сказал мне: «Да, практически во всех браузерах порядок элементов будет изменяться только тогда, когда это необходимо для удовлетворения условий такого рода.

Ответы [ 4 ]

7 голосов
/ 03 февраля 2009

То, что вы ищете, является ли алгоритм "стабильным". Известно, что Firefox нет, а IE есть. Стандарт javascript не требует стабильного алгоритма сортировки.

Редактировать: Firefox 3+ имеет стабильную сортировку. Пожалуйста, смотрите http://www.hedgerwow.com/360/dhtml/js_array_stable_sort.html

1 голос
/ 03 февраля 2009

Каждый браузер имеет различную реализацию, поэтому не рассчитывайте на это.

0 голосов
/ 03 февраля 2009

Все основные браузеры имеют стабильные алгоритмы сортировки, а также (поскольку существует некоторый глупый код), они могут обрабатывать несовместимые функции сравнения.

0 голосов
/ 03 февраля 2009

Я считаю, что это зависит от типа объектов, которые вы сортируете в своем массиве. Вы можете предоставить "функцию сортировки" для array.sort (), чтобы определить правила сортировки определенного объекта. Например, рассмотрим функцию:

function sortInt(a, b){
   if ( a < b )
    return -1;
   else if ( a == b )
     return 0;
   else if ( a > b )
     return 1;
}

Так что это, очевидно, надумано, но вы можете применить эту же идею к любому объекту, который "сопоставим". Вы всегда будете возвращать -1, 0 или 1 в зависимости от того, меньше ли, равно или больше b (соответственно).

Вы бы тогда сказали: array.sort(sortInt);

Оговорка:

Простите, если синтаксис не идеален, поскольку у меня нет примера под рукой. Я также не уверен в стабильности Array.sort () с точки зрения кросс-браузера.

Редактировать: Исправлено форматирование фрагмента кода псевдо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...