一、问题场景
我在有次项目中,需要取出一组数据的最小值: var data={"105779.02", "156206.38", "183432.39", "3722.41", "42979.47", "45066.82", "72362.10", "93933.99", "94026.86", "98592.64"}。
一般的想法,就直接想到使用java数组的排序算法, sort()方法,然后我就使用该方法排序后,就取第一个值,代码提交后,发现取到的不是想要的3722.41,因为之前也用过此方法比较一些整数,一顿操作猛如虎,然而不知道哪儿出错了!! 排序后的结果为:
0: "105779.02"
1: "156206.38"
2: "183432.39"
3: "3722.41"
4: "42979.47"
5: "45066.82"
6: "72362.10"
7: "93933.99"
8: "94026.86"
9: "98592.64
二、问题解决
后来经查资料,发现此处的小数,如果是不同的位数话,会自动先比较相同位数的,相同位数比较完后,再去比较下一批。 将data.sort() 修改为 data.sort(function(a, b){return a - b}); 这样就是升序排序,如果想要是降序的话,那么修改return语句的a-b 为 b-a;
整理如下:
升序: data.sort(function(a, b){return a - b})
降序: data.sort(function(a, b){return b-a })
重新调试后,发现结果就按照从小到大的顺序排列:
"3722.41","42979.47", "45066.82", "72362.10", "93933.99",...,"105779.02", "156206.38","183432.39"