javascript中sort的盲点

本文详细解析了JavaScript sort方法的工作机制,特别是它如何进行字符串排序,并提供了通过自定义函数实现数字排序的实例。同时介绍了sort方法接受自定义比较函数的实现方式,以及如何利用这种方式进行灵活排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




不知道大家是否用过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参数的方法也值得借鉴。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值