如何在字符串中查找字符串数组?
Posted
技术标签:
【中文标题】如何在字符串中查找字符串数组?【英文标题】:How to find an array of strings in a string? 【发布时间】:2017-03-22 13:53:25 【问题描述】:我想在一个字符串中搜索多个字符串,如果在其中找到任何字符串,则返回 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
到目前为止,如果它通过for
循环而没有找到任何东西,它将返回undefined
。我在for
循环之后有return false
,但它会在for
完成之前运行。
我觉得必须有一种更简单的方法来做到这一点。
我已经尝试过How do you search multiple strings with the .search() Method?,但我无法将数组发送到.search()
。
我正在使用的框架:angular 1.5.8,jquery 1.11.1
【问题讨论】:
"我在 for 循环之后返回 false,但它会在 for 完成之前运行。"鉴于您的示例中的代码,这是不可能的。 你可能希望重新考虑改变内置对象的原型,或者至少确保你正确地填充。另见Why is extending native objects a bad practice?。比如Array.isArray
在最新版本的javascript中已经是一个函数,而Angular已经有了angular.isString()
...
@MikeMcCaughan 来自您引用的第一个答案:“更改仅由您自己的代码使用的对象的行为很好。”不过,我确实很欣赏这些参考资料。这里有很多很好的信息。谢谢兄弟。
【参考方案1】:
您可以使用Array.some
和String.indexOf
或String.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
【讨论】:
以上是关于如何在字符串中查找字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章