javascript中sort的盲点

来源:互联网 发布:54捕鱼源码 编辑:程序博客网 时间:2024/04/28 00:59




不知道大家是否用过javascript中的sort方法。相信大家使用的时候都应该知道一点,sort方法排序是按照字符串排序的,排序的方法就是比较字符串大小。
例如:

var values = [1, 2, 3, 10, 5, 8, 20];values.sort();alert(values);

这样的排序后结果是什么呢?
[1,10,2,20,3,5,8]为什么会如此呢,答案就是其排序方式是依据字符串比较大小。
大家都知道字符串比较大小是从第一个开始比较,如果相同再比较第二个,在1, 2, 3, 10, 5, 8, 20中,很明显看到1和10是首次比较最小的字符串,因此1和10再继续比较,结果当然是1在前,然后比较选择出2和20这两个字符串继续比较,同理。因此可以成功的得到如上结果。
同时说明一下javascript的sort内部实现是冒泡排序方式因此我们可以来模拟他的排序过程:

【1】、1,2,10,3,5,20,8 【2】、1,10,2,3,20,5,8【3】、1,10,2,20,3,5,8 【4】、1,10,2,20,3,5,8

排序结束
这样就是最终的结果啦!
看到这样的结果很多时候不是我们所需要的,因为我们是对数字排序,而他却给我们做了一个字符串排序,那如何才能得到我们想要的结果1,2,3,5,8,10,20呢?
可以看下w3cschool的例子:

function sortNumber(a,b){return a - b}var arr = new Array(6)arr[0] = "10"arr[1] = "5"arr[2] = "40"arr[3] = "25"arr[4] = "1000"arr[5] = "1"document.write(arr + "<br />")document.write(arr.sort(sortNumber))

sort方法,他可以接受一个参数,这个参数是一个function,而这个function作用就是比较大小,那sort内部是如何实现接受function作为参数的。
至今没有找到介绍内部实现的文章,比较郁闷。
这样接受function参数我们也可以使用其他灵活的方法实现:
例如:倒序排序,按照你的意愿排序,我们希望使用和排序,
有时候希望使用和排序:10,30,12,50,60,19,24我们希望得到的结果是10(1),12(3),30(3),50(5),24(6),60(6),19(10)
因此这样的sort很适合推广,同样这种接受一个function参数的方法也值得借鉴。

原创粉丝点击