36

我有一个浮点数数组:

[ 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 ]

在数组上运行 sort() 后,我得到了这个:

[ 28.86823689842918, 49.61295450928224, 5.861613903793295, 82.11742562118049 ]

请注意 5.8... 如何大于 49.6... 对于 JavaScript(节点)。这是为什么?

如何正确排序这些数字?

4

2 回答 2

52

传入一个排序函数:

[….].sort(function(a,b) { return a - b;});

结果:

[5.861613903793295, 28.86823689842918, 49.61295450928224, 82.11742562118049] 

来自 MDN

如果未提供 compareFunction,则通过将元素转换为字符串并按字典(“字典”或“电话簿”,而不是数字)顺序比较字符串来对元素进行排序。

于 2013-08-28T19:49:52.447 回答
3

内置的 JS 排序功能将所有内容都视为字符串。尝试制作自己的:

var numbers = new Array ( 82.11742562118049, 28.86823689842918, 49.61295450928224, 5.861613903793295 );

function sortFloat(a,b) { return a - b; }

numbers.sort(sortFloat);
于 2013-08-28T19:52:23.277 回答