通常の状況では、誰もが次の方法を使用して漢字のピンインを並べ替えます
var list = [ 'Wang', 'Zhang', 'Li'];
list.sort(function (a, b) {
return a.localeCompare(b) ;
} );
localeCompare(): ロケール固有の順序で 2 つの文字列を比較します。
localeCompare によるピンインのソートの信頼性の低さは次のとおりです:
1. 中国語のオペレーティング システムに大きく依存します
2. ブラウザのカーネルに大きく依存します
つまり、Web サイトの訪問者が使用している場合中国語以外のシステムや IE 以外のブラウザ (Chrome など) を使用している場合、期待したピンインの並べ替え結果が表示されない可能性が高くなります。
----------------------------------------------- --- ----------------------------------
この問題に対する私の解決策を紹介します。他の人にインスピレーションを与えることができれば幸いです。
このメソッドは、Unicode 文字セットの 0x4E00 から 0x9FA5 までの連続領域で、中国 (台湾を含む)、日本、韓国の合計 20902 文字、つまり CJK (中国語、日本語、韓国語)中国語の文字。
var CompareStrings = {
db: '吖A ああ、ああ、ああ... 袰訨鐢骪鏏霻鶑', // 数万文字は省略
getOrderedUnicode: function (char) {
varoriginalUnicode = char.charCodeAt ();
if (originalUnicode >= 0x4E00 &&originalUnicode varindex = this.db.indexOf(char);
if (index > -1) >インデックス 0x4E00 を返します
}
}
オリジナルの Unicode を返します;
},
比較: function (a, b) {
if (a == b) { return 0;
}
// これは、特定のニーズに応じて書き換えることができます。現在の書き方では、 if (a.length == 0) { return 1 }
if を最後に置きます。 (b.length == 0) { return -1; }
var count = a.length > b.length ? b.length :
for (var i = 0; i var au = this.getOrderedUnicode(a[i]);
var bu = this.getOrderedUnicode(b[i]); > return 1;
} else if (au < bu) {
return -1;
}
return a.length > 1 : -1;
}
}
// システムのネイティブ localeCompare を書き換えます
String.prototype.localeCompare = function (param) {
return CompareStrings.compare(this.toString(), param); 🎜>}
完全なコードは次のリンクからダウンロードできます http://xiazai.jb51.net/201211/yuanma/js_pinyin_jb51.rar
実装原理の簡単な紹介:
1. ピンイン フォント ライブラリ (db) で並べ替える: 目標を達成するには、さまざまな方法があります。まず、スクリプトを使用してすべての中国語の文字を列挙し、送信しました。ソート用に C# バックグラウンドに出力して、フロントに出力します。これは、ただの準備作業です。
2. 2 つの文字のどちらが大きいかを決定します (getOrderedUnicode): 並べ替えの際には、漢字だけでなく漢字以外の文字も処理する必要があるため、コンパレーターはすべての文字を認識できなければなりません。文字を判断する 漢字かどうかは別の方法で処理されます。漢字の場合は、ソートされたフォント ライブラリでそのインデックス値を検索し、取得したインデックス値と Unicode 文字内の最初の中国語の位置を加算します。セットは「調整」後になります。 Unicode 文字セットのインデックス値。中国語文字でない場合は、Unicode 文字セットのインデックス値を返します。
3. 2 つの文字列を比較します (比較): 2 つの文字列の各文字を 1 つずつ比較します (有効な範囲内、つまり短い文字列の長さを比較します)。 a が b より大きいことが判明した場合の場合は 1 を返し、それ以外の場合は -1 を返します。
4. 有効範囲内で比較しても勝者が決まらない場合は、どちらが長いかによって異なります。たとえば、b が長いほうになります。順位は後ほど。
グリーンチャンネル: 良い記事が気に入ったら、私をフォローし、この記事をブックマークして、私に連絡してください。