JavaScript sort()

admin發表於2018-09-08

此方法實現對陣列元素的排序功能。

注:此方法是對原陣列的操作,並沒有生成新的陣列。

更多關於陣列內容可以參閱JavaScript Array 陣列一章節。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
array.sort(sortby)

引數解析:

sortby:可選,規定排序規則的一個函式。

瀏覽器相容:

(1).IE瀏覽器支援此方法。

(2).edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).火狐瀏覽器支援此方法。

(5).opera瀏覽器支援此方法。

(6).safria瀏覽器支援此方法。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var arr=new Array(1,2,3,4,5,6,7,8,9,10);
console.log(arr.sort());

以上程式碼實現了排序功能,貌似是由小到大排序,但是並非如此。

彈出的結果是:

[HTML] 純文字檢視 複製程式碼
1,10,2,3,4,5,6,7,8,9

實際上排序比較的並非是數值的大小,此函式的比較原則如下:

如果此方法沒有引數,那就會將陣列中的元素嘗試轉換成字串,然後比較字串中每個字元的ASCII碼的大小,較小的的字串在前面。

特別說明:字串比較ASCII碼的方式是首先比較首字元的ASCII碼,如果能夠區分出大小則停止比較,如果相等則繼續比較下一個字元,依次類推。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var a=["a","b","c","d"];
a.sort();
console.log(a);

輸出結果:a,b,c,d 。

a、b、c、d的ASCII碼值分別是:97、98、99、100。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var a=["a","B","c","d"];
a.sort();
console.log(a);

輸出結果:B,a,c,d 。

大寫字母B的的ASCII碼值是65,所以它排在第一位。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var a=["abc","abd","c","d"];
a.sort();
console.log(a);

輸出結果:abc,abd,c,d 。

當第一個字母的ASCII無法比較出結果時,再比較第二個ASCII碼的大小。

函式帶有引數的時候:

sort()函式可以有一個引數,但是此引數必須是一個函式,並且此引數是可選的。

此引數可以規定排序規則,下面就簡單介紹一下帶有引數情況下,此函式的用法:

作為引數函式一般會有兩個引數,用於傳遞陣列中的元素,並用於排序規則操作,如果返回值大於零,則兩個值互換,否則不互換。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function compare(a,b){
  if(a<b){
     return 1;
  }
}
var myArra=new Array(10,2,3,4,5,6,7,8,9,1);
console.log(myArra.sort(compare));

輸出結果:10,9,8,7,6,5,4,3,2,1。

其實引數函式的兩個引數不是必須的,看以下程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function compare(){ 
  return 0.5-Math.random(); 
}
var arr=[0,1,2,3,4,5,6,7,8,9];
arr.sort(compare) 
console.log(arr);

以上程式碼可以隨機打亂陣列元素原有元素的順序。

但是引數函式並沒有引數,實際上並不影響陣列元素的比較。


相關文章