4

1 つのメイン文字列に一連の文字列が存在するかどうかを確認する必要があります。

現在、for ループを含む配列を使用して各文字列をチェックしています。

私が遭遇したルビーのこのソリューションのように、より簡単な方法はありますか -文字列を他の複数の文字列と比較する方法

["string1","string2","string3"].include? myString
4

2 に答える 2

4

for ループはどのくらい複雑ですか? これがループの存在です。setOfStrings文字列のセットが と呼ばれる配列であり、メイン文字列が と呼ばれる変数にあると仮定しますmainString

var stringExists = false;
var setOfStrings = ['string1', 'string2', 'string3'];

for(var i =0;i < setOfStrings.length; i++){
  if(mainString.indexOf(setOfStrings[i]) != -1)
      stringExists = true;
}

Ruby の構造ほど簡潔ではないかもしれませんが、非常に一般的です。

于 2013-08-18T00:46:34.987 に答える
2

A さんが少し実験を行ったところ、次の方法で問題なく動作することがわかりました。唯一のオーバーヘッドは、配列の各要素の正規表現の生成です。checkが 0 以上の場合、文字列の 1 つが見つかりました。

if (!('included' in Array.prototype)) {
  Array.prototype.included = function() {
    return arr.map(function (item) {
      var regex = new RegExp(item, 'g');
      if (regex.test(str)) return true;
      return false;
    }).indexOf(true);
  };
}

数値の代わりにブール値を返すには、次のように変更します。

if (!('included' in Array.prototype)) {
  Array.prototype.included = function () {
    var regex, found = false;
    for (var i = 0, l = this.length; i < l; i++) {
      regex = new RegExp(this[i], 'g');
      if (regex.test(str)) { found = true; break; }
    }
    return found;
  };
}

var found = arr.included(str);

実際に質問に答えていないことに気付いたので、これは以前の回答の編集です:)

于 2013-08-18T00:29:52.473 に答える