web-dev-qa-db-ja.com

JavaScriptで文字列を比較するための最適な方法は?

私はJavaScriptで文字列をバイナリ検索する関数を最適化しようとしています。

バイナリ検索では、キーがピボットの==かピボットの<かを知る必要があります。

しかし、JavaScriptでは2つの文字列比較が必要です。これは、3つの値(-1, 0, +1)を返す(より小さい、等しい、より大きい)strcmp()関数を持つCのような言語とは異なります。

JavaScriptには、バイナリ検索を繰り返すたびに1回の比較しか必要としないように3進値を返すことができるネイティブ関数がありますか。

356
HRJ

localeCompare()メソッドを使うことができます。

string_a.localeCompare(string_b);

/* Expected Returns:

 0:  exact match

-1:  string_a < string_b

 1:  string_a > string_b

 */

参考文献:

481
Daniel Vassallo

JavaScriptでは、整数と同じ値の2つの文字列をチェックできるので、これを実行できます。

  • "A" < "B"
  • "A" == "B"
  • "A" > "B"

したがって、strcmp()と同じ方法で文字列をチェックする独自の関数を作成できます。

だからこれは同じことをする関数になるでしょう:

function strcmp(a, b)
{   
    return (a<b?-1:(a>b?1:0));  
}
53
Cipi

比較演算子を使用して文字列を比較できますstrcmp関数は次のように定義できます。

function strcmp(a, b) {
    if (a.toString() < b.toString()) return -1;
    if (a.toString() > b.toString()) return 1;
    return 0;
}

編集 これは、2つの文字列が互いにどのように関連しているかを示すために、最大{min(length/a)、length(b)}の比較を行う文字列比較関数です。

function strcmp(a, b) {
    a = a.toString(), b = b.toString();
    for (var i=0,n=Math.max(a.length, b.length); i<n && a.charAt(i) === b.charAt(i); ++i);
    if (i === n) return 0;
    return a.charAt(i) > b.charAt(i) ? -1 : 1;
}
13
Gumbo