並べ替えの目的で2つの文字列をアルファベット順に比較しようとしています。たとえば、のようなブール値のチェックが必要ですif('aaaa' < 'ab')。試してみましたが、正しい結果が得られないので、これは正しい構文ではないようです。jqueryまたはJavascriptでこれを行うにはどうすればよいですか?
'aaaa' < 'ab'はを返しますtrue。<!-投票を削除するための誤った編集->
並べ替えの目的で2つの文字列をアルファベット順に比較しようとしています。たとえば、のようなブール値のチェックが必要ですif('aaaa' < 'ab')。試してみましたが、正しい結果が得られないので、これは正しい構文ではないようです。jqueryまたはJavascriptでこれを行うにはどうすればよいですか?
'aaaa' < 'ab'はを返しますtrue。<!-投票を削除するための誤った編集->
回答:
いくつかのテストケースを見てみましょう。JSコンソールで次の式を実行してみてください。
"a" < "b"
"aa" < "ab"
"aaa" < "aab"
すべてtrueを返します。
JavaScriptは文字列を文字ごとに比較し、アルファベットの "a"は "b"の前に来ます-したがって、より小さいです。
あなたの場合、それはそのように機能します-
1。" AAA" < " B"
最初の2つの "a"文字を比較します-すべて等しいので、次の文字に移動できます。
2。" Aの AA" < " B "
2番目の文字「a」を「b」と比較します-おっと!「a」は「b」の前に来ます。trueを返します。
"a" < "b" === true "a" < "B" === false。
比較はソートの目的であるとあなたは言う。それから私は代わりに提案します:
"a".localeCompare("b");
Array.prototype.sort()に必要なように、それ-1以降"a" < "b"、1または0それ以外で戻ります
並べ替えはロケールに依存することに注意してください。たとえば、ドイツ語でäは、のバリアントなaので、を"ä".localeCompare("b", "de-DE")返します-1。スウェーデン語でäは、はアルファベットの最後の文字の1つなので、を"ä".localeCompare("b", "se-SE")返します1。
への2番目のパラメーターがないlocaleCompare場合、ブラウザーのロケールが使用されます。私の経験では、これは決して私が望むものではありません。それは、すべてのユーザーに対して固定されたロケールを持つサーバーとは異なるソートになるためです。
"aa".localeCompare("ab")== "aa" .localeCompare( "Ab")のすべてのロケールで考えられます)でも問題なく、IEの古いバージョンでも機能することにも言及する価値があります。受け入れられる答えでなければなりません!
"a".localeCompare("b")前にソートして-1から実際に戻るはずですab