JavaScript字符串排序localeCompare()筆記


  今天遇到了一個沒有接觸過的方法,是localeCompare()。查了一些相關的文檔,給出的定義很模糊,所以就把自己的理解寫下來。

  首先由例子入手!

  已知一串學生姓名的字符串,根據學生姓名的長度按照降序排序,並返回名稱列表。等長度的名稱將以相反的字母順序(Z-> A)返回。

  給出字符串 string = "xxa xxb xxc xxd xa xb xc xd";

  返回 ['xxd', 'xxc', 'xxb', 'xxa', 'xd', 'xc', 'xb', 'xa'];

接下來就是正解代碼!

 1 function lineupStudents(students){
 2     var stu=students.split(" ");
 3     stu.sort(function(a,b){
 4         if(a.length==b.length){
 5             return b.localeCompare(a);
 6         }else{
 7             return b.length-a.length;
 8         }
 9     });
10     console.log(stu);
11 }
12 var s1 = 'Tadashi Takahiro Takao Takashi Takayuki Takehiko Takeo Takeshi Takeshi';
13 lineupStudents(s1);//輸出['Takehiko','Takayuki','Takahiro','Takeshi','Takeshi','Takashi','Tadashi','Takeo','Takao']

  這個例子中還是利用array對象的排序方法,在排序參數提供的函數中再來進行本地的排序。

  接下來看看Sort() 官方說法:

 

arrayobj.sort(sortfunction)

 

  參數

 

arrayObj

 

必選項。任意 Array 對象。

 

sortFunction

 

可選項。是用來確定元素順序的函數的名稱。如果這個參數被省略,那么元素將按照 ASCII 字符順序進行升序排列。

 

  說明

 

sort 方法將 Array 對象進行適當的排序;在執行過程中並不會創建新的 Array 對象。

 

如果為 sortfunction 參數提供了一個函數,那么該函數必須返回下列值之一:

 

  • 負值,如果所傳遞的第一個參數比第二個參數小。
  • 零,如果兩個參數相等。
  • 正值,如果第一個參數比第二個參數大。

 

再來看看localeCompare()是怎么說的!

 

  定義和用法

 

用本地特定的順序來比較兩個字符串。

 

  語法

 

stringObject.localeCompare(target)

 

參數

描述

target

要以本地特定的順序與 stringObject 進行比較的字符串。

 

返回值

 

說明比較結果的數字。如果 stringObject 小於 target,則 localeCompare() 返回小於 的數。如果 stringObject 大於 target,則該方法返回大於 的數。如果兩個字符串相等,或根據本地排序規則沒有區別,該方法返回 0

 

綜上兩個方法的說明,在sortfunction參數存在的情況下都會有數字結果返回值。而在例子中最關鍵的步驟就是b.localeCompare(a),按着特定的順序比較兩個字符串;

 

另外再補充一點,stringObj.localeCompare(target)中誰比較誰,決定了列表的升序還是降序。例如:

 

1 if(a.length==b.length){
2     return a.localeCompare(b);
3 }else{
4     return a.length-b.length;
5 }

 

結果顯示就是升序排列!

針對於localeCompare()(比較兩個字符串,考慮了默認的本地排序規則),使用的本地規則有漢字和英語的,例子中用的是英語,則是根據字母排序的。如果有用到漢字則是根據漢字拼音來排序。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM