排序一个包含小数和整数的数组

6
我似乎无法解决这个问题。
var arr = [2.62, 111.05, 1.05]
arr.sort(); 

这个代码返回的是[1.05, 111.05, 2.62],但我期望的是[1.05, 2.62, 111.05]。如何实现呢?我已经了解了一些编写自定义排序算法来拆分“小数”方面的知识,但是没有成功过。

1
不熟悉JavaScript,但排序似乎将元素视为字符串而不是浮点数。 - advocateofnone
3个回答

16

默认情况下,排序是按字母顺序排列的。您需要向 sort 方法传递一个函数。

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

如果还是不行,试试这个:arr.sort(function(a,b){return a > b;}); - s.n
@s.n 这是错误的,> 会将 ab 视为字符串进行比较,因此仍然是按字母顺序比较。 - Anti Earth

9

sort 方法默认将数组项作为字符串进行比较。您可以指定一个比较函数,以任何您喜欢的方式进行比较。这将按数字大小比较数组项:

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

注意:在Javascript中,所有数字都是双精度浮点数,即使它们包含整数值,因此整数值和小数值并没有被区别对待。

2

如果没有给Array.sort()函数传递比较器函数,这就是其正常的行为。可以尝试以下代码:

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

来自 MDN:

如果未提供 compareFunction ,则元素通过将它们转换为字符串并按照 Unicode 代码点排序来进行排序。例如,"Cherry" 在 "banana" 之前。在数字排序中,9 在 80 之前,但由于数字被转换为字符串,因此在 Unicode 排序中,“80” 在 “9” 之前。

请注意,本文档是关于 JavaScript 中的 Array.sort() 方法的说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接