非常直截了当。在javascript中,我需要检查字符串是否包含数组中持有的任何子字符串。


当前回答

单线解决方案

substringsArray.some(substring=>yourBigString.includes(substring))

如果子字符串存在\不存在,则返回true\false

需要ES6支持

其他回答

var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = 0, len = arr.length; i < len; ++i) {
    if (str.indexOf(arr[i]) != -1) {
        // str contains arr[i]
    }
}

编辑: 如果测试的顺序不重要,你可以使用这个(只有一个循环变量):

var str = "texttexttext";
var arr = ["asd", "ghj", "xtte"];
for (var i = arr.length - 1; i >= 0; --i) {
    if (str.indexOf(arr[i]) != -1) {
        // str contains arr[i]
    }
}

以下是目前为止(在我看来)最好的解决方案。这是一个现代的(ES6)解决方案,它:

是高效的(一行!) 避免for循环 与其他答案中使用的some()函数不同,这个函数不仅返回一个布尔值(true/false) 相反,它要么返回子字符串(如果它在数组中找到),要么返回undefined 更进一步,允许您选择是否需要部分子字符串匹配(示例如下)

享受吧!



const arrayOfStrings = ['abc', 'def', 'xyz'];
const str = 'abc';
const found = arrayOfStrings.find(v => (str === v));

在这里,found将被设置为'abc'。这将适用于精确的字符串匹配。

如果你用:

const found = arrayOfStrings.find(v => str.includes(v));

同样,found在本例中被设置为'abc'。这不允许部分匹配,所以如果str被设置为'ab', found将是未定义的。


And, if you want partial matches to work, simply flip it so you're doing:
const found = arrayOfStrings.find(v => v.includes(str));

代替。如果str被设为'ab' found就会被设为'abc'

容易peasy !



单线解决方案

substringsArray.some(substring=>yourBigString.includes(substring))

如果子字符串存在\不存在,则返回true\false

需要ES6支持

var yourstring = 'tasty food'; // the string to check against


var substrings = ['foo','bar'],
    length = substrings.length;
while(length--) {
   if (yourstring.indexOf(substrings[length])!=-1) {
       // one of the substrings is in yourstring
   }
}
let obj = [{name : 'amit'},{name : 'arti'},{name : 'sumit'}];
let input = 'it';

使用滤镜:

obj.filter((n)=> n.name.trim().toLowerCase().includes(input.trim().toLowerCase()))