关于javascript:排序小数和数组的数组;

Sorting an array of decimal & whole numbers

本问题已经有最佳答案,请猛点这里访问。

我好像想不出这个。

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

这将返回[1.05,111.05,2.62],但我期待[1.05,2.62,111.05]。

如何实现这一目标?我读过一些关于编写自定义排序来分割"十进制"的文章,但还没有成功。


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

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


默认情况下,sort方法将项目作为字符串进行比较。您可以指定比较器函数以任何方式进行比较。这将把项目作为数字进行比较:

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

注意:javascript中的所有数字都是双精度浮点数,即使它们恰好包含一个整数值,所以整数值和十进制值的处理方式也不一样。


这是Array.sort()在没有给定比较器函数时的正常行为。试试这个:

1
2
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.