並べ替えのために、2つの文字列をアルファベット順に比較しようとしています。たとえば、のようなブールチェックが必要ですif('aaaa' < 'ab')
。試してみましたが、正しい結果が得られないので、正しい構文ではないと思います。jqueryまたはJavascriptでこれを行うにはどうすればよいですか?
5 に答える
あなたは、比較がソートの目的であると言います。次に、代わりにlocaleCompareをお勧めします。
"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
場合、ブラウザーのロケールが使用されます。私の経験では、これは私が望むものではありません。それは、すべてのユーザーに対して固定されたロケールを持つサーバーとは異なる方法でソートされるためです。
また、並べ替えに数値が含まれている場合は、次のようにすることができます。
"a5b".localeCompare("a21b", undefined, { numeric: true })
これは-1を返し、数値として5が21未満であることを認識します。これがない{ numeric: true }
と、「2」は「5」の前にソートされるため、1を返します。多くの実際のアプリケーションでは、ユーザーは「a5b」が「a21b」の前に来ることを期待しています。
いくつかのテストケースを見てみましょう-JSコンソールで次の式を実行してみてください:
"a" < "b"
"aa" < "ab"
"aaa" < "aab"
すべてtrueを返します。
JavaScriptは文字列を文字ごとに比較し、アルファベットでは「a」が「b」の前に来るため、未満になります。
あなたの場合、それはそのように機能します-
1。" a aaa" <"<strong> a b"
最初の2つの「a」文字を比較します-すべて等しい、次の文字に移動しましょう。
2。"a <strong> a aa" <"a <strong> b"
2番目の文字「a」を「b」と比較します-おっと!「a」は「b」の前にあります。trueを返します。
「x」>「X」のような文字列の比較では大文字と小文字が区別されることを覚えておいてください
"aa" < "ab" //true
"aa" < "Ab" //false
.toLowerCase()
大文字と小文字を区別せずに比較するために使用できます。
"a".localeCompare("b")
前にソートし-1
てから実際に戻る必要がありますa
b
オブジェクトの配列があるとしましょう:
{ name : String }
次に、配列を次のように並べ替えることができます。
array.sort(function(a, b) {
var orderBool = a.name > b.name;
return orderBool ? 1 : -1;
});
注:大文字に注意してください。目的によっては、文字列を小文字にキャストする必要がある場合があります。