js-2018-11-09 關於Array中的srot()方法和compare()方法

RoninOw發表於2018-11-09

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)

相關文章