1

アルファベットの昇順ソート(標準)動作を実行する必要があるコードに取り組んでいて.sort()、特殊文字やさまざまな文字セットの文字でソートがどのように機能するのか疑問に思いました。例えば:

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エンティティ番号が見つかりません。

4

1 に答える 1

3

独自の比較関数を提供しない場合は、ECMAScript仕様に従って、次のルールが適用されます。

  1. xとyが両方とも未定義の場合、+0を返します。
  2. xが未定義の場合、1を返します。
  3. yが未定義の場合、-1を返します。
  4. 引数comparefnがsortの呼び出しで提供されなかった場合は、ステップ7に進みます。
  5. 引数xおよびyを指定してcomparefnを呼び出します。
  6. Result(5)を返します。
  7. ToString(x)を呼び出します。
  8. ToString(y)を呼び出します。
  9. Result(7)<Result(8)の場合、-1を返します。
  10. Result(7)> Result(8)の場合、1を返します。
  11. +0を返します。

あなたの特定のケースでは、それはステップ7-11によって決定されます。

また、<and>演算子は、最初の異なる文字のUnicodeエンコーディング値を比較します。

String.localeCompare()状況をより細かく制御するために、MDNは、文字をソートするための少しスマートなロジックを含む独自のカスタム比較関数を使用することをお勧めします。

于 2012-08-22T22:10:37.570 に答える