4

javascriptの場合:

"Id".localeCompare("id")

「id」の方が大きいと報告されます。「Id」が大きくなるように、(ロケールではなく)序数の比較を行いたい。これは、C#のString.CompareOrdinalに似ています。どうすればいいですか?

4

5 に答える 5

5

私はレイモンドチェンとpstによって与えられた答えを支持します。JavaScriptの質問への回答として、お気に入りのサイトであるMozillaDeveloperNetworkのドキュメントを使用してバックアップします。余談ですが、JavaScriptに関する今後の質問については、このサイトを強くお勧めします。

ここで、「文字列の比較」セクションの下にある「文字列」というタイトルのMDNセクションに移動すると、次の説明が表示されます。

C開発者は、文字列を比較するためのstrcmp()関数を持っています。JavaScriptでは、小なり記号と大なり記号を使用するだけです。

var a = "a";  
var b = "b";  
if (a < b) // true  
  print(a + " is less than " + b);  
else if (a > b)  
  print(a + " is greater than " + b);  
else  
  print(a + " and " + b + " are equal.");

Stringインスタンスによって継承されたlocaleCompareメソッドを使用して、同様の結果を得ることができます。

文字列"Id"foraと"id"forbを使用すると、次の結果が得られます。

"Id is less than id"

これは、YaronがlocaleCompareメソッドを使用したときに以前に取得した結果と同じです。MDNで説明されているように、より小さい演算子とより大きい演算子を使用すると、を使用した場合と同様の結果が得られlocaleCompareます。

したがって、Yaronの質問に対する答えは、JavaScriptの文字列の序数比較を行うために、小なり記号(<)および大なり記号(>)演算子を使用することです。

YaronがC#メソッドについて言及したのでString.CompareOrdinal、このメソッドが上記のJavaScriptとまったく同じ結果を生成することを指摘したいと思います。MSDN C#のドキュメントによると、String.CompareOrdinal(String, String)メソッドは「各文字列内の対応するCharオブジェクトの数値を評価することにより、指定された2つのStringオブジェクトを比較します」。したがって、2つの文字列パラメータは、個々の文字の数値(ASCII)値を使用して比較されます。

Yaron Navehによる元の例をC#で使用すると、次のようになります。

int result = String.CompareOrdinal("Id", "id");

の値はゼロ未満resultのanであり、おそらく「I」(0x49)と「i」(0x69)の差がであるためです。したがって、字句的に「Id」は「id」よりも小さくなります。これは、以前に取得した結果と同じです。int-32-0x20 = -32

于 2012-05-17T14:49:12.180 に答える
1

ただの推測:すべての文字の大文字と小文字を逆にすることによって?

于 2012-05-17T13:49:58.290 に答える
1

Raymondがコメントで指摘(および説明)したように、「通常の」非ロケール認識比較は、文字列にさまざまな等式演算子を使用するのと同じくらい簡単です(両方のオペランドが文字列であることを確認してください)。

"a" > "b" // false 
"b" > "a" // true

少し凝ったものにするために(または[[prototype]]をいじらないでください、関数は同じです):

String.prototype.compare = function (a, b) {
    return ((a == b ? 0)
        ? (a > b : 1)
        : -1)
}

それで:

"a".compare("b") // -1

ハッピーコーディング。

于 2012-05-17T13:52:45.807 に答える
0
function compareOrdinal(ori,des){
    for(var index=0;index<ori.length&&index<des.length;index++){
        if(des[index].charCodeAt(0)<ori[index].charCodeAt(0)){
            return -1;
            break;
        }
    }
    if(parseInt(index)===des.length-1){
        return 0;
    }
    return 1;
}

compareOrdinal("idd","id");//output 1
于 2012-05-17T14:07:27.450 に答える
-1

2つの文字列を比較して違いを見つける必要がある場合は、次を確認してください。

function findMissingString() {
    var str1 = arguments[0];
    var str2 = arguments[1];
    var i = 0 ;
    var j = 0 ;
    var text = '' ;
    while(i != (str1.length >= str2.length ? str1.length : str2.length )) {
        if(str1.charAt(i) == str2.charAt(j)) {
            i+=1 ;
            j+=1;
        } else {
            var indexing =  (str1.length >= str2.length ? str1.charAt(i) : str2.charAt(j));
            text = text + indexing ;
            i+=1;
            j+=1;
        }
    }
    console.log("From Text = " + text);
}
findMissingString("Hello","Hello world");

于 2016-07-01T13:40:08.797 に答える