快速比较字符串和数组的方法

mm1*_*975 4 javascript typescript

我有一个有很多名字的数组:{'John Doe', 'Peter Shark', ...}.

现在我想比较和匹配一个字符串,例如,如果数组包含它,则'This is your turn John Doe, pls do it'返回名称.该字符串可以是长文本.

我试过这样,但它不起作用:

var searchStr = "This is your turn John Doe, pls do it"

var stringArray = ["John Doe", "Peter Shark"];

return (stringArray.indexOf(searchStr) > -1)
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 10

你需要搜索相反的方法 - 迭代stringArray并检查some名称是否包含在searchStr:

var searchStr1 = "This is your turn John Doe, pls do it";
var stringArray = ["John Doe", "Peter Shark"];
console.log(stringArray.some(name => searchStr1.includes(name)));

var searchStr2 = "This is your turn Foo Bar, pls do it";
console.log(stringArray.some(name => searchStr2.includes(name)));
Run Code Online (Sandbox Code Playgroud)

虽然some非常干净和清晰,但for循环比数组方法稍微快一些,但是只要你有数以万计的项迭代:

var searchStr = "This is your turn John Doe, pls do it";
var stringArray = ["John Doe", "Peter Shark"];

const searchFor = stringArray => {
  for (let i = 0, { length } = stringArray; i < length; i++) {
    if (searchStr.includes(stringArray[i])) return true;
  }
  return false;
};

console.log(searchFor(["John Doe", "Peter Shark"]));
console.log(searchFor(["Foo Bar", "Peter Shark"]));
Run Code Online (Sandbox Code Playgroud)