並べ替えの目的で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
から実際に戻るはずですa
b