2013-08-19 69 views
1

我嘗試了下面的例子,但現在正在處理正確的信息。如何在JavaScript中對浮點數組進行排序?

var fruits = [110.111, 1245.22222, 2.458, 0.001]; 
fruits.sort(); 
document.write(fruits); 

結果:

0.001,110.111,1245.22222,2.458 

但我想是這樣的

0.001,2.458,110..111,1245.22222 

不對的代碼是什麼?在ASCII爲了

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

Array.sort()方法將把數字視爲字符串,訂單成員:

+0

誰能告訴我,爲什麼'的.sort()'渲染錯誤輸出? – void

回答

6

array.sort([compareFunction])有一個可選的功能,它可以作爲一個自定義的比較

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

如果你想降序排序

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

經由:MDN Array.prototype.sort docs

  • 如果compareFunction(a, b)小於0,排序一個比B,即一個較低折射率的第一。
  • 如果compareFunction(a, b)返回0,則相對於彼此保持a和b不變,但相對於所有不同的元素進行排序。注意:ECMAscript標準並不保證這種行爲,因此並非所有瀏覽器(例如,至少可以追溯到2003年的Mozilla版本)都尊重這一點。
  • 如果compareFunction(a, b)大於0,排序b鍵比較低折射率。
  • compareFunction(a, b)當給定一對特定元素a和b作爲其兩個參數時,必須始終返回相同的值。如果不一致的結果返回則排序順序是未定義

最近,我一直在做一些函數式編程。對於那些想要以不同方式解決相同問題的人來說,我將把這一部分留作另一種選擇。

首先,我們有一些通用的實用功能。當我們想要定義我們的高階ascdesc排序功能時,這些將是必要的。

const sub = x => y => y - x; 
const flip = f => x => y => f (y) (x); 
const uncurry = f => (x,y) => f (x) (y); 
const sort = f => xs => xs.sort(uncurry (f)); 

現在你可以在sub

const asc = sort (flip (sub)); 
const desc = sort (sub); 

方面很容易地定義ascdesc檢查出來

asc ([4,3,1,2]); //=> [1,2,3,4] 
desc ([4,3,1,2]); //=> [4,3,2,1] 

,您仍然可以做一個自定義排序使用sort (comparator) (someData)

// sort someData by `name` property in ascending order 
sort ((a,b) => a.name - b.name) (someData); //=> ... 
+0

太感謝你了 –

+0

誰能告訴我,爲什麼'的.sort()'渲染錯誤輸出? – void

2

您可以使用自定義排序功能是這樣的。

+0

任何人都可以告訴我爲什麼'.sort()'呈現錯誤的輸出? – void

1

您可以定義排序功能:

fruits.sort(function(a,b) {return a>b}) 
+0

任何人都可以告訴我爲什麼'.sort()'呈現錯誤的輸出? – void

1

使用自定義功能進行排序。

對它進行排序,你需要創建一個比較函數接受兩個 參數,然後調用排序功能與比較 功能如下:

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

如果你想排序升序變化parseInt函數(一) - parseInt函數(b)和parseInt函數(b) - parseInt函數(a)中。請注意0​​從a更改爲b。

+0

任何人都可以告訴我爲什麼'.sort()'呈現錯誤的輸出? – void