js陣列排序方法有兩個:reverse()
和sort()
,其中reverse()
可將陣列進行倒序,而sort()
則可將陣列項靈活地進行公升序或降序排列。
var arr = [8,4,9,1];
console.log(arr.reverse()); // [1, 9, 4, 8]
console.log(arr); // [1, 9, 4, 8]
可以看出,reverse()
會直接改變原陣列,並且返回值也是倒序後的陣列。
記得當年學c語言時,要學各種各樣的排序演算法,比如經典的氣泡排序法、二分排序法等,現在拋開這些演算法不說,js就自帶原生的排序函式,用起來非常方便,它就是sort()
。
var arr = [8,4,9,1];
console.log(arr.sort()); // [1, 4, 8, 9]
console.log(arr); // [1, 4, 8, 9]
可以看出,sort()
不傳引數時會按公升序方式對陣列項進行排序,並且與reverse()
一樣既改變原陣列,同時返回的也是排序後的陣列。
var arr = [8,90,9,16];
console.log(arr.sort()); // [16, 8, 9, 90]
這時你可能會說,不對呀,最終排序返回的不應該是[8, 9, 16, 90]
嗎?然鵝事實返回的卻是[16, 8, 9, 90]
,這到底是哪門子邏輯?
事實上,sort()
並不是按照數值進行排序,而是按字串字母的ascii碼值進行比較排序的,所以當陣列項為數字時,sort()
也會自動先將數字轉換成字串,然後再按字母比較的規則進行排序處理。
現在我們再回頭看看前面兩個例子。當arr
為[8,4,9,1]
時,陣列每一項轉換成字串後進行排序的結果正好與數字排序結果相同;而當arr
為[8,90,9,16]
時,陣列每一項轉換成字串後就得按順序一位一位進行比較,比如公升序排序時,「16」應該排在最前面,因為「16」的第一位是「1」,比「8」和「9」的ascii碼值都要小。
囉嗦了這麼多,其實我們實際很少會使用這種排序方式,而更多的應該就是純數字的排序。那麼我們該如何正確地使用sort()
來達到預期的排序效果呢?
接下來就來看看傳參後的sort()
能給我們怎樣的精彩表現。
這個函式引數功能其實很簡單,實際上就是告訴sort()
排序方式到底是公升序還是降序,我們還是來看具體例項吧~
var arr = [8,90,9,16];
// 公升序
console.log(arr.sort(function (a, b) )); // [8, 9, 16, 90]
// 降序
console.log(arr.sort(function (a, b) )); // [90, 16, 9, 8]
這種用法的規則是,當sort()
傳入函式中的第乙個引數a位於第二個引數b之前,則返回乙個負數,相等則返回0,a位於b之後則返回正數。
比如,當要做公升序排序時,我們需要想到前面的數肯定是要比後面的數小,所以傳入的這個函式引數返回值應該要是個負數,因此函式引數返回a - b
。
如果實在不好理解,我們可以乾脆記下來,a - b
公升序,b - a
降序,但是需要注意的是,如果按照這種記憶方式的話,函式括號內的兩個引數a
和b
的書寫順序可不能顛倒哦~
① sort() 不傳參時預設為公升序,且是按字串比較的方式排序;傳參時,其引數為函式,且該函式帶倆引數a 和 b,返回值 a - b 為公升序,b - a為降序
② reverse() 和 sort() 兩函式均會改變原陣列,且返回值同樣也是改變後的陣列
JS陣列排序
function bubblesort array return array vararray1 2,5,1,9 bubblesort array1 1,2,5,9 function usesort array var array1 2,5,1,9 usesort array1 在資料集中,選擇乙個...
js 陣列排序
var array 1,4,8,3,6,12,9,8 function compare val1,val2 array.sort compare document.write array sort 方法按照公升序排列陣列項,會呼叫每個陣列項的tostring 轉型方法,然後比較得到的字串。tostr...
JS陣列排序
用陣列的排序 sort 方法.但sort 方法本身是按ascii字元 從小到大排列的.所以說,如果是數字的話,會出現下面這種情況 var arr 3,32,3,5 arr.sort alert arr.tostring 輸出 2,3,32,5 但是 sort 方法可以接收乙個引數,就是乙個比較函式 ...