2012-08-22 25 views
1

我正在編寫一些代碼,我需要執行字母升序排序(標準.sort())行爲,我想知道如何使用不同字符集中的特殊字符和字符進行排序。例如:JavaScript如何決定來自不同字符集的字符的排序順序?

var aChars = []; 

aChars.push("¢"); 
aChars.push("™"); 
aChars.push("È"); 
aChars.push("~"); 
aChars.push("p"); 
aChars.push("_"); 
aChars.push("P"); 
aChars.push("治"); 
aChars.push("す"); 

aChars.sort(); 

for (var i = 0;i<aChars.length;i++) { 
    console.log(aChars[i]); 
    //alert(aChars[i]); 
}​ 

我執行此代碼時總會得到一致的順序。 JavaScript如何決定訂單?我認爲這可能是HTML實體編號,但我找不到這些日文字符的HTML實體編號。

回答

3

如果你不提供自己的比較函數,然後按照ECMAScript spec,這裏有規則:

  1. 如果x和y都是不確定的,返回+ 0。
  2. 如果x未定義,則返回1.
  3. 如果y未定義,則返回-1。
  4. 如果在排序調用中未提供參數comparefn,請轉至步驟7.
  5. 使用參數x和y調用comparefn。
  6. 退貨結果(5)。
  7. 調用ToString(x)。
  8. 調用ToString(y)。
  9. 如果結果(7)<結果(8),返回-1。
  10. 如果結果(7)>結果(8),返回1.
  11. 返回+0。

對於您的特定情況,它由步驟7-11確定。

而且,<>運算符比較第一個不同字符的Unicode編碼值。

爲了更好地控制情況,MDN建議使用您自己的自定義比較函數,該函數使用String.localeCompare(),其中包含用於排序字符的更智能的邏輯。

+0

@pst - 啊,我明白你現在在說什麼。這是來自spec PDF的奇怪的複製/粘貼問題。它在PDF中是正確的,但是當複製文本時,負號被丟棄。它們必須以剪貼板形式存在,而瀏覽器在粘貼時會丟棄它們。感謝您的修復。 – jfriend00

相關問題