不传参用法(按字符串排序)
const fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.sort())
![](https://i-blog.csdnimg.cn/blog_migrate/8bdc81f1069accb8e8a1469bd493cadb.png)
默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序
const arr = [55,2,66,24,32,78,16,36,13]
console.log(arr.sort())
![](https://i-blog.csdnimg.cn/blog_migrate/fea3a080ec97b285f69627af512d6312.png)
可以看到,“2”排在“13”、“16”之后,因为 "2" 大于 "1"。
传参用法(可控制升序或降序)
升序(a-b)
const arr = [55,2,66,24,32,78,16,36,13]
arr.sort(function(a,b){
return a-b
})
console.log(arr)
![](https://i-blog.csdnimg.cn/blog_migrate/d51663ab67565be92739f2ffe52666a5.png)
降序(b-a)
const arr = [55,2,66,24,32,78,16,36,13]
arr.sort(function(a,b){
return b-a
})
console.log(arr)
![](https://i-blog.csdnimg.cn/blog_migrate/6a8fe39c06c883869daa4b9d7f1760d6.png)
sort传参原理
听说原理是冒泡排序,这里截图一位老哥的说法
![](https://i-blog.csdnimg.cn/blog_migrate/2471795480c8fc86d88421548fac6aa2.png)
那我们打印一下a,b看看
![](https://i-blog.csdnimg.cn/blog_migrate/fc0d7d6fb8330ccd0350b00a24285502.png)
认真分析了一下,没看出什么头绪,再多看一眼,直接爆炸,再靠近一点快被融化(我真的花了半小时研究)
貌似不像冒泡排序,如果有懂得老哥可以评论一下带带我,不过既然不知道是什么原理,我们也得记住这个传参的用法
利用传参解决问题
题目
以下代码执行后,array的结果是?(选自牛客网)
var array=[-1,1,3,4,6,10];
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));
分析一波,我们发现这题就像数学老师教你1+1,考试让你造火箭一样,好像不会做,这里我也不卖关子了,直接教大家怎么做
![](https://i-blog.csdnimg.cn/blog_migrate/74058f27d21e1e07fbb9b25b1b3300e8.png)
还是刚才那位老哥的答案,看别人我没看懂,唯独他的我看懂了,这里我做个笔记,以免日后忘记
1.第一步分析题目
array.sort((a,b)=>Math.abs(a-3)-Math.abs(b-3));
看到a-b,直接警觉好吧,a-b是升序
2.再分析题目
然后就是Math.abs求绝对值,答主用原来的数组,直接-3并加绝对值,得出下面的数组
减3后绝对值的数组:[4,2,0,1,3,7]
3.利用分析出来的结果再分析
因为第一步知道是升序,就把这个求出来的新数组排序
升序排序后的数组:[0,1,2,3,4,7]
4.得出结果
然后对比这三个数组
① 题目给的数组:[-1,1,3,4,6,10]
② 减3后绝对值的数组:[4,2,0,1,3,7]
③ 升序排序后的数组:[0,1,2,3,4,7]
④ 比较后,根据①、②、③求出结果的数组:[3,4,1,6,-1,10]
比较抽象