126

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

4

5 に答える 5

180

あなたは、比較がソートの目的であると言います。次に、代わりにlocaleCompareをお勧めします。

"a".localeCompare("b");

Array.prototype.sort()に必要な場合と同様に、以降に-1戻ります。"a" < "b"10

並べ替えはロケールに依存することに注意してください。たとえば、ドイツ語でäは、の変形で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」の前に来ることを期待しています。

于 2016-01-13T23:38:51.667 に答える
137

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

于 2012-04-17T20:05:42.607 に答える
32

「x」>「X」のような文字列の比較では大文字と小文字が区別されることを覚えておいてください

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

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

于 2013-07-28T07:29:42.100 に答える
8

"a".localeCompare("b")前にソートし-1てから実際に戻る必要がありますab

http://www.w3schools.com/jsref/jsref_localecompare.asp

于 2016-09-12T20:13:22.503 に答える
5

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

{ name : String }

次に、配列を次のように並べ替えることができます。

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

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

于 2019-08-22T15:49:36.893 に答える