为了账号安全,请及时绑定邮箱和手机立即绑定

JS中重排序方法sort()和比较函数

JS中重排序方法sort()和比较函数

慕盖茨4494581 2019-04-19 16:30:03
想要按照从小到大的顺序排列varnumbers=[0,1,5,10,15];numbers.sort();console.log(numbers);打印出来是0,1,10,15,5书中说的是字符串比较下,10在5的前面,这是怎么比较的???functioncompare(a,b){if(ab){return1;}else{return0;}}numbers.sort(compare);console.log(numbers);比较函数作为参数传递给sort()之后,是怎么让2个数字换位置排列的?不清楚调换位置的动作是哪行代码执行的,难道是sort()本身可以对返回值1,-1,0做相应的动作让两个数字调换位置吗?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

关于第一次排序的结果
为什么数组[0,1,5,10,15].sort()之后的结果是0,1,10,15,5,而不是期待的0,1,5,10,15这是因为sort方法默认(即没有compare函数)按照数组元素对应的字符串的Unicode从小到大进行排序。也就是说,上面的结果中5排在10,15后面,是因为'5'比'10','15'大。你现在就可以按F12打开console,输入下面的代码
'5'> '10'
结果应该是true。这说明,字符串'5'比'10'大,所以它排在后面。
关于compare函数
compare函数只是指定了排序策略,sort会根据这个策略来排序。至于怎么调换位置,怎么生成最后的结果,那是sort的事情。这里其实是一个常见的设计模式,策略模式。有兴趣可以去了解一下。
                            
查看完整回答
反对 回复 2019-04-19
?
弑天下

TA贡献1818条经验 获得超8个赞

JS高级程序设计?哈哈,刚好前段时间看了这个。问题1上面已经解答了,我补充一下问题2。
compare作为sort()的参数返回三个结果:0、1、-1。即0、正数、负数。就像你说的“sort()本身可以对返回值1,-1,0做相应的动作让两个数字调换位置”,这里是sort()得到的参数为正数时才交换两个值的顺序,否则不交换。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 646 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号