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)