Почему JavaScript не сортируется [5, 10, 1]?

Это похоже на простой вид, но JavaScript дает неверный результат.

Я делаю что-то неправильно или это языковая причуда?

[5, 10, 1].sort();

[1, 10, 5]

Ответ 1

Javascript сортируется в алфавитном порядке. Это означает, что "10" ниже "5", потому что "1" меньше, чем "5".

Чтобы отсортировать числовые значения, необходимо передать в числовом компараторе следующим образом:

function sorter(a, b) {
  if (a < b) return -1;  // any negative number works
  if (a > b) return 1;   // any positive number works
  return 0; // equal values MUST yield zero
}

[1,10, 5].sort(sorter);

Или вы можете обмануть, пропустив более простую функцию:

function sorter(a, b){
  return a - b;
}

[1, 10, 5].sort(sorter);

Логика этой более короткой функции заключается в том, что компаратор должен возвращать x>0 if a > b, x<0 if a < b и zero if a is equal to b. Поэтому, если у вас есть

a=1 b=5
a-b will yield negative(-4) number meaning b is larger than a

a=5 b=1
a-b will yield positive number(4) meaning a is larger than b

a=3 b=3
a-b will yield 0 meaning they are equal

Ответ 2

Вы должны передать функцию методу сортировки.

var points = [5, 10, 1];
points.sort(function(a,b){return a-b});

Здесь - рабочая скрипка.

Ответ 3

Порядок сортировки по умолчанию - это алфавитный и восходящий. Если вы хотите отсортировать номер, вы можете сделать что-то вроде этого:

function sortNumber(a,b) {
    return a - b;
}

var numArray = [140000, 104, 99];
numArray.sort(sortNumber);

Ответ 4

function sortit(a, b){ return (a-b); }
[1, 5, 10].sort(sortit);

Ответ 5

Вы можете попробовать:

[5, 10, 1].sort(function(a, b){ return a - b })   # print [1, 5, 10]

Ответ 6

вы можете попробовать

[5, 10, 1].sort(function(a,b){return a-b})