Клиентский JavaScript. Справочник

         

Если compareFunction не предоставляется, элементы


Если compareFunction не предоставляется, элементы сортируются путём конвертации их в строки и сравнения строк в лексикографическом порядке ("словарном порядке" или "порядке телефонной книги", а не в числовом порядке). Например, "80" в словарном порядке идёт перед "9", а в числовом 9 идёт перед 80.
Если параметр compareFunction предоставлен, элементы массива сортируются в соответствии с return-значением сравнивающей функции. Если a и b являются сравниваемыми элементами, то:
  • Если compareFunction(a, b) меньше 0, b сортируется с меньшим индексом, чем a.
  • Если compareFunction(a, b) возвращает 0, a и b не изменяют своего положения друг относительно друга, но сортируются относительно всех других элементов.
  • Если compareFunction(a, b) больше 0, b сортируется с большим индексом, чем a.
Итак, функция сравнения имеет следующую форму:
function compare(a, b) {
if (a меньше b по некоторому критерию сортировки)
      return -1
   if (a больше b по некоторому критерию сортировки)
      return 1
   // иначе a обязано быть равно b
   return 0
} Для сравнения чисел, а не строк, функция сравнения может просто вычитать b из a:
function compareNumbers(a, b) {
   return a - b
} JavaScript использует стабильную сортировку: относительное расположение a и b не меняется, если a и b равны. Если до сортировки индекс a был меньше, чем индекс b, он будет меньше и после сортировки вне зависимости от того, как a и b будут перемещены в ходе сортировки.
Поведение метода sort различается в версиях JavaScript 1.1 и JavaScript 1.2.
В JavaScript 1.1, на некоторых платформах, метод sort не работает. Этот метод работает на всех платформах в JavaScript 1.2.
В JavaScript 1.2 этот метод больше не конвертирует undefined-элементы в null; вместо этого он сортирует их в конец массива. Например, у вас имеется такой скрипт:
<SCRIPT>
a = new Array();
a[0] = "Ant";
a[5] = "Zebra"; function writeArray(x) {
   for (i = 0; i < x.length; i++) {
      document.write(x[i]);
      if (i < x.length-1) document.write(", ");
   }
} writeArray(a);
a.sort();
document.write("<BR><BR>");
writeArray(a);
</SCRIPT>В JavaScript 1.1 будет выведено:
ant, null, null, null, null, zebra
ant, null, null, null, null, zebra В JavaScript 1.2 будет выведено:
ant, undefined, undefined, undefined, undefined, zebra
ant, zebra, undefined, undefined, undefined, undefined

Содержание раздела