如何在字符串中查找字符串数组?

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.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

【讨论】:

以上是关于如何在字符串中查找字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在字符串数组中过滤或查找字符串

如何在字符串中查找字符串数组?

如何在数组jQuery中查找字符串的一部分

如何从包含字符串中查找数组列表的数量

在数组中查找字符串

CreateQueryBuilder 在数组中查找字符串?