AlexLearne Ответов: 1

Как работает метод sort () в javascript?


Я озадачен этим:
function min(a, b) {
  return b.length - a.length
}
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k'].sort(min)-> array returns unchanged
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k','l'].sort(min) -> returns 
["f", "a", "c", "d", "e", "b", "g", "h", "i", "k", "l"]

Вопрос в том, почему? В документах об этом ничего нет.

Что я уже пробовал:

Я попытался найти поведение метода со строками на MDN, но ничего не смог найти по этому вопросу. Может быть, я искал не в том месте?

1 Ответов

Рейтинг:
7

Richard Deeming

Ваша функция сравнения сравнивает длину строк в массиве. Все строки имеют один символ, поэтому длина 1 Это означает, что функция сравнения считает все строки равными друг другу.

Глядя на документацию:


Сорт не обязательно стабильный[^].

Другими словами, если функция сравнения возвращает одно и то же значение для двух элементов исходного массива, нет никакой гарантии, что элементы останутся в одном и том же относительном порядке друг относительно друга.

Поведение, которое вы видите, будет варьироваться в зависимости от размера массива и используемого движка Javascript. Результат не предсказуем.


AlexLearne

Спасибо за ваш ответ. Это то, что я на самом деле думал, но вы никогда не знаете наверняка!

Karthik_Mahalingam

5!, идеальный ответ.

Протестировал приведенный выше код в нескольких браузерах, он отлично работает в IE и Firefox, но терпит неудачу в Chrome.