我在數值數組中遇到了奇怪的排序結果。例如排序結果[1,2,10,20,100,200]:爲什麼JavaScript不按數字順序排序數值數組?
> [1, 2, 10, 20, 100, 200].sort()
[ 1, 10, 100, 2, 20, 200 ]
爲什麼發生這種情況?
看來什麼數組排序不能用於直接排序數值數組?
我在數值數組中遇到了奇怪的排序結果。例如排序結果[1,2,10,20,100,200]:爲什麼JavaScript不按數字順序排序數值數組?
> [1, 2, 10, 20, 100, 200].sort()
[ 1, 10, 100, 2, 20, 200 ]
爲什麼發生這種情況?
看來什麼數組排序不能用於直接排序數值數組?
如果未提供的compareFunction,元件通過將它們轉換爲字符串,並在字典(「字典」或「電話薄」,而不是數值)順序比較字符串排序。
(或見EMCAScript specification的相關部分,帽尖費利克斯·克林爲挖參考)
如果你想要做一個數字排序,然後通過一個比較功能:
[1, 2, 10, 20, 100, 200].sort(function (a,b) { return a-b; });
正確的名稱是「Kling」,與「l」。不用擔心,大多數人似乎弄錯了;) –
它就在我的面前。現在我不能在人們眼前至少一週的時間裏誤導我的名字拼寫錯誤! – Quentin
array.sort
只對字符串排序。排序號使用:
[1, 2, 10, 20, 100, 200].sort(function(a,b) { return a-b });
嘗試此數字排序:
[ 1, 10, 100, 2, 20, 200 ].sort(function(a,b){return a-b})
的sort()方法調用每個項目的()的字符串轉換函數,然後比較字符串,以確定正確的訂購。即使數組中的所有項都是數字,也會發生這種情況。 試試這種方式:
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
[ 1, 10, 100, 2, 20, 200 ].sort(compare);
是的。這就是它在規範中的定義:http://es5.github.io/#x15.4.4.11。 –
可能重複[排序不與整數?](http://stackoverflow.com/questions/1063007/sort-not-working-with-integers) – darthmaim