gpt4 book ai didi

javascript - 检查字符串中是否存在列表(数组)中的两个或多个单词...javascript

转载 作者:行者123 更新时间:2023-11-28 14:10:08 25 4
gpt4 key购买 nike

我正在寻找答案并发现了这个: multiple conditions for JavaScript .includes() method

但是,此解决方案执行列表中的一个或所有单词:

 //checks for one
const multiSearchOr = (text, searchWords) => (
searchWords.some((el) => {
return text.match(new RegExp(el,"i"))
})
)

//checks for all
const multiSearchAnd = (text, searchWords) => (
searchWords.every((el) => {
return text.match(new RegExp(el,"i"))
})
)

这些工作,但我需要能够匹配传入列表中的两个或多个单词。就像下面这样:

  let name = "jaso bour 2";
let spl = name.split(' ');
let passed = multiSearchAnd("my name is jason bourne the fourth on the fifth", spl);
console.log(passed);

在上面的场景中传递的变量是假的,但我希望它是真的,因为字符串“jaso”和“bour”在搜索的字符串中。

如何更改 multiSearchAnd 函数,以便如果从传入列表中找到两个或多个单词而不是全部单词,它将返回 true?谢谢

最佳答案

您找到的解决方案中的两个函数使用 Array#some()Array#every()。这些数组助手只能做两件事:数组中的任何元素满足条件(因此,匹配至少1)或每个元素满足条件。您需要一个特定的数字,因此您无法真正轻松地使用这些辅助函数。但是,您可以通过一个简单的循环自己完成此操作:

const multiSearchAtLeastN = (text, searchWords, minimumMatches) => {
let matches = 0;
for (let word of searchWords) {
if (text.includes(word) && ++matches >= minimumMatches) return true;
}
return false;
};

//demonstration
let name = "jaso bour 2";
let spl = name.split(' ');
let passed = multiSearchAtLeastN("my name is jason bourne the fourth on the fifth", spl, 2);
console.log(passed);

这样做的好处是一旦知道结果就返回结果,而不是涉及 .filter() 的其他可能的解决方案,后者必须首先迭代整个数组而不会提前退出.

<小时/>

如果您重视简洁的代码,您还可以通过巧妙地使用 Array#some() 并提前退出来实现此目的:

const multiSearchAtLeastN = (text, searchWords, minimumMatches) => (
searchWords.some(word => text.includes(word) && --minimumMatches <= 0)
);

//demonstration
let name = "jaso bour 2";
let spl = name.split(' ');
let passed = multiSearchAtLeastN("my name is jason bourne the fourth on the fifth", spl, 2);
console.log(passed);

关于javascript - 检查字符串中是否存在列表(数组)中的两个或多个单词...javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com