2015-02-10 64 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中所有数字的双精度浮点数,即使它们会包含一个整数值,所以整数值和十进制值不会区别对待。