Array中的srot()方法 sort()方法是用來重排序的方法。在預設情況下,sort()方法按升序排列數組項 即最小的值位於最前面,最大的值排在最後面。 我們看看官方是怎麼說的: arrayObj.srot(sortFunction) 參數 arrayObj 必選項。任意Array對象 sor ...
Array中的srot()方法
sort()方法是用來重排序的方法。在預設情況下,sort()方法按升序排列數組項----即最小的值位於最前面,最大的值排在最後面。
我們看看官方是怎麼說的:
arrayObj.srot(sortFunction)
參數
arrayObj
必選項。任意Array對象
sortFunction
可選項。是用來確定元素順序的函數的名稱。如果這個參數被省略,那麼元素將按照ASCII字元串進行升序排列。
說明
sort()方法將Array對象進行適當的排序,在執行過程中並不會創建新的Array對象。
如果sort()方法里傳入的是函數,那麼數組就會根據傳入的函數排列,該函數必須返回下列值之一:
- 如果所傳遞的第一個參數比第二個參數小,則返回負值。
- 如果第一個參數比第二個參數大,則返回正值。
- 如果兩個參數相等,則返回0。
1 var values = [0, 1, 5, 10, 15]; 2 values.sort(); //調用sort()方法 3 console.log(values); //0, 1, 10, 15, 5
如上,在字元串比較時 ”10” 位於 “5” 的前面,於是輸出結果10 在5 的前面。sort()方法會調用每個數組項的toString()轉型方法(即把要排序的內容轉化為string),然後按照字元串的第一位(從右到左)的ASCII碼先後順序進行比較,以確定如何排序。即使數組中的每一項都是數值,sort()方法比較的也是字元串。
所以說,sort()方法這種排序方式在很多情況下都不是最佳方案。因此sort()方法可以接收一個比較函數作為參數,以便避免上面這種結果。
1 /*compare函數*/ 2 function compare(value1, value2) { 3 //return value1 - value2; 4 if(value1 < value2) { 5 return -1; 6 } else if(value1 > value2) { 7 return 1; 8 } else { 9 return 0; 10 } 11 } 12 13 var values = [0, 1, 10, 15, 5]; 14 values.sort(compare); //values調用sort()方法,然後傳入並引用compare函數,然後返回compare的參數(負值,正值,0)。 15 console.log(values); //0, 1, 5, 10, 15
如上,比較函數compare接收數組values的兩個參數,value1 < value2 則返回 -1;value1 > value2 則返回 1;反之則返回 0;
對於數值類型或者其valueOf()方法會返回數值類型的對象類型,也可以把比較函數compare簡單化,如下
1 function compare(value1, value2){ 2 return value2 - value1; 3 }
由於比較函數是通過返回一個小於零、等於零或大於零的值來影響排序結果,因此減法操作就可以適當處理所有這些情況。
小結
1. sort()方法單獨引用並不穩定和嚴謹,所以sort()方法可以返回一個比較函數來作為參數。
2. 在sort()方法引用比較函數時,必須滿足返回三個數值(負值,正值,零)。
3. 日常打卡(1/1)