不知道大家在學習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