对小数和整数数组进行排序

Sorting an array of decimal & whole numbers

我似乎想不通。

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

这个 returns [1.05, 111.05, 2.62],但我期待 [1.05, 2.62, 111.05].

如何实现?我读过一些关于编写自定义排序来拆分 "decimal" 但没有成功的文章。

默认情况下按字母顺序排序。您需要将函数传递给 sort 方法

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

这是 Array.sort() 未提供比较器功能时的正常行为。试试这个:

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

来自MDN

If compareFunction is not supplied, elements are sorted by converting them to strings and comparing strings in Unicode code point order. For example, "Cherry" comes before "banana". In a numeric sort, 9 comes before 80, but because numbers are converted to strings, "80" comes before "9" in Unicode order.

sort method默认将项目作为字符串进行比较。您可以指定一个比较器函数以任何您喜欢的方式进行比较。这会将项目作为数字进行比较:

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

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