4

我需要检查一个主字符串中是否存在任何一组字符串。

目前我正在使用带有 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为零或更高,则找到其中一个字符串。

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 回答