2015-02-10 45 views
0

我似乎無法弄清楚這一點。對十進制數和整數進行排序

var arr = [2.62, 111.05, 1.05] 
arr.sort(); 

這將返回[1.05,111.05,2.62],但我期待[1.05,2.62,111.05]。

這是如何實現的?我讀過一些關於編寫自定義排序來拆分「小數」的方法,但沒有設法取得任何成功。

+0

不熟悉JavaScript,但排序看起來好像元素是字符串而不是浮動 – sashas 2015-02-10 21:41:25

回答

6

默認排序按字母順序排列。你需要一個函數傳遞給sort方法

arr.sort(function(a, b){return a-b;}); 
1

這是Array.sort()當它沒有給出一個比較器功能的正常行爲。試試這個:

var arr = [2.62, 111.05, 1.05]; 
arr.sort(function(a,b) { return a-b; }); 

MDN

如果不提供的compareFunction,元素由Unicode代碼點順序將它們轉換爲字符串和比較字符串排序。例如,「櫻桃」出現在「香蕉」之前。在數字排序中,9在80之前,但由於數字被轉換爲字符串,「80」以Unicode順序出現在「9」之前。

3

sort method默認情況下將項目作爲字符串進行比較。您可以指定一個比較器函數來按照您喜歡的方式進行比較。這將比較的項目,如號碼:

arr.sort(function(a, b){ return a - b; }); 

注:在Javascript中所有數字的雙精度浮點數,即使它們會包含一個整數值,所以整數值和十進制值不會區別對待。