5

メソッド「 localeCompare」を使用して、次のように独自のローカライズで配列をソートできるという事実を認識しています。

aArray.sort(function(a,b){return a.localeCompare(b)});

ただし、私のスウェーデン語サイトのほとんどの (事実上すべての) 訪問者はスウェーデン語を理解しているため、現在使用している "ロケール" に関係なく、スウェーデン語の並べ替えを期待していると思います。

(今ではこの仮定について議論したくなる人もいると思いますが、スウェーデン語を理解しているが現在別のロケールを使用している人の数は、スウェーデン語のアルファベットを知らずに使用している人の数よりも多いと思います"å" と "ä" は "a" と同等にソートされ、"ö" は "o" と同等にソートされることが期待されます. スウェーデン語の最後の 3 文字 "åäö" は常にその順序でソートされることを本当に望んでいます。メソッド「 localeCompare」で使用される「ロケール」を定義するものは何でも、ブラウザまたはオペレーティングシステムの

メソッド「localeCompare」が呼び出されたときに使用される「ロケール」をプログラムで強制することが1つの解決策だったかもしれませんが、私が理解している限り、これは不可能です。(ただし、実際に可能である場合、どのようにロケールを変更しますか?)

この並べ替えの問題は、すべてのスウェーデンの JavaScript プログラマーにかなり共通しているはずですが、スウェーデンの文字列の比較メソッドを実装したオープン ソース ライブラリを見つけることができませんでした。自分で実装しようとするのではなく、再利用するために、そのようなライブラリ(ソートメソッドで使用するとパフォーマンスが向上する実装)について知っている人はいますか?

4

3 に答える 3

1

JavaScript Internationalization API は、まさに必要なものを提供します。私が参照したページにいくつかの使用例があります。残念ながら、ブラウザではまだ広くサポートされていません。

于 2013-01-25T21:33:08.833 に答える
0

@Pawel Dyda (コメントスウェーデン語などのアルファベットの並べ替えメソッドを実装した JavaScript ライブラリはありますか? )

いいえ、JS のみではありませんが、jQuery テーブルソーターを見つけました。これは素晴らしいと思いますが、次のコードを見つけたときに並べ替えの問題に遭遇しました。

$('table').tablesorter({ 
  textSorter: function(a,b) { 
    return a.localeCompare(b); 
  } 
});

(これは、ページhttp://mottie.github.com/tablesorter/docs/の「sortLocaleCompare」に記載されています)

実際、私はサーバーで並べ替えを実装し、JavaScript が無効になっているクライアントもサポートするつもりですが、JavaScript を使用しているクライアントの場合、同じ結果セットに対して Web サーバーに再度要求する必要なく、tablesorter を使用できると考えました (ただし、並べ替えは異なります)。 )。少なくとも、ページングを必要としないほど小さい結果セットに実装するのは非常に簡単です。つまり、すべての行が 1 ページに収まる場合は、jQuery テーブルソーターに対して " serverSideSorting: false " を生成するだけで、Web 内で自動的に並べ替えられます。ブラウザ。

于 2013-01-25T21:18:54.593 に答える
0

@Richard Marr (スウェーデン語などのアルファベットの並べ替えメソッドを実装した javascript ライブラリはありますか?というコメント)

非常に難しいかどうかはわかりませんが、javascript でできるほど効率的にするのはおそらく簡単ではありません。車輪を再発明しようとしているような気がします.javascriptが得意な人は、おそらく私よりもうまくやっているでしょう. あらゆるものに対応するオープンソース ライブラリがいくつ存在するかを考えると、このようなものがまだ存在していないことを認識しなければならないことに少し驚かされます。

コードスニペットについて

'sort(function(a,b){ return position[a] - position[b]; })' 

a と b が文字であると期待しているように思えます。たとえば、次のような構造が頭に浮かんだと思います。

var position = {
// e.g. essentially the codes here: http://en.wikipedia.org/wiki/Multinational_Character_Set
'A': 65,
'B': 66,
//...
// the three swedish characters:
//'Ä': 196, 
//'Å: 197,
//'Ö': 214,
// The above are the correct values according to the codes, but the relative ordering of Å and Ä is not correct for swedish so therefore I switch the values below:
'Å': 196, 
'Ä': 197,
'Ö': 214
};

実際、そのような位置構造を使用することもできますが、sort メソッドの関数パラメーターは 1 文字のみの文字列ではなく 2 つの任意の文字列を受け取るため、両方の文字列の各文字 (最初の違いまで) を反復して処理する必要があると思います。ポジション構造と比較。私はそれを行うためのより良い(より効率的な)方法があることを望んでいました...

于 2013-01-25T21:15:46.853 に答える