不知道大家在學(xué)習(xí)sort()排序時候膳音,解決它排序方式問題召衔,會使用某種function,來進(jìn)行調(diào)整祭陷。當(dāng)我剛剛知道原理時苍凛,我瀕臨崩潰:媽的內(nèi)置功能不早說,我還以為多高明呢1尽4己!
當(dāng)你使用sort()
相對數(shù)組進(jìn)行排序時想罕,你會蒙圈的:
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
果然解決了,但是惭适,為啥笙瑟?我就冥思苦想,想了快半年了腥沽,也沒想出頭緒(這就跟給你張鳥腿的圖片逮走,讓你猜什么鳥一樣嘛)
知道今天,我看到了這個今阳,我的憤怒與自責(zé)师溅。。盾舌。
sort內(nèi)部使用快速排序墓臭,每次比較兩個元素大小的時候如果沒有參數(shù),則直接判斷字母表妖谴,如果有參數(shù)窿锉,則把正在比較的兩個參數(shù)傳入自定義方法并調(diào)用(正在比較的兩個數(shù)會傳給自定義方法的v1、v2)膝舅,如果返回值大于0表示v1 > v2嗡载,如果等于0,表示v1 = v2仍稀,如果小于0洼滚,表示v1 < v2,其實(shí)我們傳入的方法就是告訴sort怎么比較兩個元素誰大誰小技潘,至于排序移動元素過程人家寫好了
試一下遥巴,果然,媽蛋享幽。铲掐。。
console.log(a.sort(function(v1,v2){
return v2-v1;
}).join());//234,63,54,43,6,5,4,4,4,3,3,1