前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript中sort的盲点

javascript中sort的盲点

作者头像
蛋未明
发布2018-06-07 15:33:12
5520
发布2018-06-07 15:33:12
举报
文章被收录于专栏:蛋未明的专栏蛋未明的专栏

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

代码语言:javascript
复制
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内部实现是冒泡排序方式因此我们可以来模拟他的排序过程:

代码语言:javascript
复制
【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的例子:

代码语言:javascript
复制
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参数的方法也值得借鉴。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档