不知道大家在学习sort()排序时候,解决它排序方式问题,会使用某种function,来进行调整。当我刚刚知道原理时,我濒临崩溃:妈的内置功能不早说,我还以为多高明呢!!!
当你使用sort()
相对数组进行排序时,你会蒙圈的:
var a = [1,234,3,5,4,6,3,63,54,4,43,4];
console.log(a.sort());//1,234,3,3,4,4,4,43,5,54,6,63
这时,某大神告诉我,要这样写:
console.log(a.sort(function(v1,v2){
return v1-v2;
}).join());//1,3,3,4,4,4,5,6,43,54,63,234
果然解决了,但是,为啥?我就冥思苦想,想了快半年了,也没想出头绪(这就跟给你张鸟腿的图片,让你猜什么鸟一样嘛)
知道今天,我看到了这个,我的愤怒与自责。。。
sort内部使用快速排序,每次比较两个元素大小的时候如果没有参数,则直接判断字母表,如果有参数,则把正在比较的两个参数传入自定义方法并调用(正在比较的两个数会传给自定义方法的v1、v2),如果返回值大于0表示v1 > v2,如果等于0,表示v1 = v2,如果小于0,表示v1 < v2,其实我们传入的方法就是告诉sort怎么比较两个元素谁大谁小,至于排序移动元素过程人家写好了
试一下,果然,妈蛋。。。
console.log(a.sort(function(v1,v2){
return v2-v1;
}).join());//234,63,54,43,6,5,4,4,4,3,3,1