2016-11-08 140 views
0

我想搜索多个字符串的字符串,并返回true如果发现在那里的任何人,false否则,这样的事情:如何在字符串中查找字符串数组?

var s = "thing1 thing2" 
s.contains(["thing1","thing44444"]) // true 
s.contains("1") // true 
s.contains("x") // false 

这里就是我有这么远,但它变得混乱并没有真正的工作:

String.prototype.contains = function(xv) { 
    var t = this 
    if(xv.isString()){ // isString/isArray are functions I made elsewhere in my code, they work. 
     if(t.indexOf(xv) > -1) 
      return true; 
    } else if(xv.isArray()) { 
     if(xv.contains(t)){ 
      return true 
     } 
     for(v in xv){ 
      if(t.indexOf(xv[v]) > -1){ 
       return true 
      } 
     } 
    } else { 
     return false 
    } 
} 

截至目前,它将返回undefined如果它使通过for循环没有找到任何东西。在for循环之后我有return false,但它会在for完成之前运行。

我觉得有一个更简单的方法来做到这一点。我已经尝试How do you search multiple strings with the .search() Method?但我无法发送数组到.search()

框架我使用的是:角1.5.8和jQuery 1.11.1

+0

“我不得不返回后的假for循环,但它会在完成之前运行。“考虑到你的例子中的代码,这是不可能的。 – zzzzBov

+0

您可能希望重新考虑更改内置对象的原型,或者至少确保正确填充内容。另请参阅[为什么要扩展本机对象是一种不好的做法?](http://stackoverflow.com/q/14034180/215552)。例如['Array.isArray'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)已经是最近版本的JavaScript中的一个函数,而Angular已经有['angular.isString()'](https://docs.angularjs.org/api/ng/function/angular.isString)... –

+0

@MikeMcCaughan从你引用的第一个答案:“改变行为一个只会被你自己的代码使用的对象很好。“我很欣赏这些参考。很多很好的信息在这里。谢了,兄弟。 –

回答

4

您可以使用Array.someString.indexOfString.includes

var s1 = "thing1 thing2"; 
 
var s2 = "Hello Kitty"; 
 

 
var r1 = ["thing1","thing44444"].some(x => s1.includes(x)); 
 
var r2 = ["Travis","Heeeeeeter"].some(x => s2.includes(x)); 
 

 
console.log(r1, r2); // true, false