Это похоже на простой вид, но JavaScript дает неверный результат.Почему JavaScript не сортируется [5, 10, 1]?
Я делаю что-то неправильно или это языковая причуда?
[5, 10, 1] .sort();
[1, 10, 5]
Это похоже на простой вид, но JavaScript дает неверный результат.Почему JavaScript не сортируется [5, 10, 1]?
Я делаю что-то неправильно или это языковая причуда?
[5, 10, 1] .sort();
[1, 10, 5]
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
Это слишком много кода! –
@ KellyJAndrews где? Широко используется второй подход. Конечно, вы можете встроить его прямо и минимизировать, если вы предпочитаете размер> читаемость. –
Я сделал свой пример в одной строке. Самое маленькое, что вы используете, - это 3. –
Порядок сортировки по умолчанию - алфавитный и восходящий. Если вы хотите, чтобы отсортировать номер, который вы могли бы сделать что-то вроде этого:
function sortNumber(a,b) {
return a - b;
}
var numArray = [140000, 104, 99];
numArray.sort(sortNumber);
function sortit(a, b){ return (a-b); }
[1, 5, 10].sort(sortit);
Вы должны передать функцию методу сортировки.
var points = [5, 10, 1];
points.sort(function(a,b){return a-b});
Here является рабочей скрипкой.
. Кроме того, [это] (http://www.w3schools.com/jsref/jsref_sort.asp) - это школы W3C об этом , –
Школы W3C - это плохой справочник – Jacob
Это плохой рэп, но я думаю, что для простых основ, это точно. –
Вы можете попробовать:
[5, 10, 1].sort(function(a, b){ return a - b }) # print [1, 5, 10]
вы можете попробовать
[5, 10, 1].sort(function(a,b){return a-b})
кажись отлично заказал для * лексического порядка *. – deceze
Ненавижу цитировать Этвуд, но ... [первое правило программирования] (http://www.codinghorror.com/blog/2008/03/the-first-rule-of-programming-its-allways-your -fault.html). –