我需要检查一个主字符串中是否存在任何一组字符串。
目前我正在使用带有for循环的数组来检查每个字符串。
有没有更简单的方法,比如我遇到的红宝石解决方案 - How to compare a string against multiple other strings
["string1","string2","string3"].include? myString
答案 0 :(得分: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构造那样简洁,但是它很常见。
答案 1 :(得分:2)
做了一个小实验,发现以下工作正常。唯一的开销是为数组的每个元素生成regexp。如果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);
这是我之前回答的编辑,因为我意识到我实际上没有回答过这个问题:)