並べ替えの目的で2つの文字列をアルファベット順に比較する


105

並べ替えの目的で2つの文字列をアルファベット順に比較しようとしています。たとえば、のようなブール値のチェックが必要ですif('aaaa' < 'ab')。試してみましたが、正しい結果が得られないので、これは正しい構文ではないようです。jqueryまたはJavascriptでこれを行うにはどうすればよいですか?


2
stackoverflow.com/questions/1134976/…を見たことはありますか?
j08691 2012

それがあなたのやり方です。どんな結果が期待できますか?式'aaaa' < 'ab'はを返しますtrue。<!-投票を削除するための誤った編集->
Guffa 2012

回答:


122

いくつかのテストケースを見てみましょう。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を返します。


2
Č、č、Š、š、Ž、žなどの特殊文字については、stackoverflow.com
questions / 6909126 /…を

4
これがネイティブに組み込まれているのが印象的です!
スラバクニャゼフ2016

11
心に留めておくべきことは首都です。"a" < "b" === true "a" < "B" === false
Ted van Riel 2017年

141

比較はソートの目的であるとあなたは言う。それから私は代わりに提案します:

"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場合、ブラウザーのロケールが使用されます。私の経験では、これは決して私が望むものではありません。それは、すべてのユーザーに対して固定されたロケールを持つサーバーとは異なるソートになるためです。


6
+1は、これもケース("aa".localeCompare("ab")== "aa" .localeCompare( "Ab")のすべてのロケールで考えられます)でも問題なく、IEの古いバージョンでも機能することにも言及する価値があります。受け入れられる答えでなければなりません!
user56reinstatemonica8

1
ピーターの+1。これはとにかくJavaScript配列の並べ替えの仕組みとの互換性が高いため、より有用であり、OPが求めていたもののほうが多いと思います。
2016

これは正解だと思います。(Unicodeではなく)アルファベット文字列を比較する唯一の方法。
Limbo

これは、英数字の値でさえ、実際にトリックを行うように見えました。ありがとう。
Joshua Pinter

30

"x"> "X"のような文字列比較では大文字と小文字が区別されることに注意してください

"aa" < "ab" //true
"aa" < "Ab" //false

.toLowerCase()大文字と小文字を区別せずに比較できます。



3

オブジェクトの配列があるとしましょう:

{ name : String }

次に、配列を次のように並べ替えます。

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

注:大文字に注意してください。目的によっては、文字列を小文字にキャストする必要がある場合があります。


ソートに使用される関数は、等しい場合に0を返すことになっています。この関数は-1または1のみを返します
Steve
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.