Javascript node.js如何在字符串数组中搜索值

Javascript node.js如何在字符串数组中搜索值,javascript,arrays,search,indexof,Javascript,Arrays,Search,Indexof,这很难解释,所以我只举一个例子。 我有一系列特定的关键字,如下所示: const keywordArr = ['jim', 'john']; 然后我有一个字符串: const message = 'Hello john, how are you doing today?' 我想检查消息是否包含关键字arr中的值。我知道我可以循环遍历关键字arr中的每个值,并检查如下: keywordArr.forEach(function(word) { if (message.toLowerCas

这很难解释,所以我只举一个例子。 我有一系列特定的关键字,如下所示:

const keywordArr = ['jim', 'john'];
然后我有一个字符串:

const message = 'Hello john, how are you doing today?'
我想检查
消息
是否包含
关键字arr
中的值。我知道我可以循环遍历
关键字arr
中的每个值,并检查如下:

keywordArr.forEach(function(word) {
    if (message.toLowerCase().includes(word)) {
         rest of code here..
    }
}

然而,我每秒收到大约5条消息,所以这种方法将非常消耗性能。有什么有效的方法可以做到这一点吗?

检查数组是否包含任何使用(示例)的单词

const关键字arr=['jim','john'];
const message='你好,约翰,你今天好吗?'
const pattern=new RegExp(`b${keywordArr.join('|')}\\b`,'gi');
const contains=pattern.test(消息);

console.log(包含)使用(示例)检查数组是否包含任何单词

const关键字arr=['jim','john'];
const message='你好,约翰,你今天好吗?'
const pattern=new RegExp(`b${keywordArr.join('|')}\\b`,'gi');
const contains=pattern.test(消息);
console.log(包含)返回真/假
我们可以使用
reduce
includes
,如果您不参与整个
RegExp
的话:

const关键字arr=['jim','john'];
const message='你好,约翰,你今天好吗?'
let has=keywordArr.reduce((r,v)=>message.toLowerCase()。包括(v.toLowerCase())| | r,false)
console.log(has)
返回真/假 我们可以使用
reduce
includes
,如果您不参与整个
RegExp
的话:

const关键字arr=['jim','john'];
const message='你好,约翰,你今天好吗?'
let has=keywordArr.reduce((r,v)=>message.toLowerCase()。包括(v.toLowerCase())| | r,false)
console.log(has)
可用于数组和检查字符串是否包含

演示

const关键字arr=['jim','john'],
message=‘你好,约翰,今天过得怎么样?’;
关键字arr.forEach(v=>{
if(message.match(v))console.log(`message contain${v}`);
});可用于数组和检查字符串是否包含

演示

const关键字arr=['jim','john'],
message=‘你好,约翰,今天过得怎么样?’;
关键字arr.forEach(v=>{
if(message.match(v))console.log(`message contain${v}`);


});
您将多次循环
关键字arr
消息。也许可以为您的用例运行一些性能测试?您可以尝试正则表达式。您应该首先检查以下内容:,如果关键字的最小长度很长,我更喜欢使用WM。如果性能是您所关心的全部,并且是最重要的,那么我建议您查看一些类似的算法。并将它们进行比较(也可能与正则表达式进行比较),然后做出相应的选择。我认为每秒5条消息并不能保证代码的高性能。当然,这取决于你的
消息的长度以及你有多少关键字。你可以多次循环
关键字arr
消息。也许可以为您的用例运行一些性能测试?您可以尝试正则表达式。您应该首先检查以下内容:,如果关键字的最小长度很长,我更喜欢使用WM。如果性能是您所关心的全部,并且是最重要的,那么我建议您查看一些类似的算法。并将它们进行比较(也可能与正则表达式进行比较),然后做出相应的选择。我认为每秒5条消息并不能保证代码的高性能。虽然这当然取决于你的
消息的长度和你有多少关键字。在每次迭代中对同一
消息调用
toLowerCase()
对你的绩效部门没有任何帮助。它可以放在主消息上,但如果需要在其他地方使用,然后你就会失去你的外壳。创建一个临时变量就可以解决这个问题。这个方法非常有效,有没有办法知道句子中的单词?在本例中,哪一个是
john
,我如何让代码知道这一点?我用第二个示例更新了答案,该示例返回字符串,而不是
true/false
valueCalling
toLowerCase()
在相同的
消息上
在每次迭代中都不会对绩效部门有任何帮助。它可以放在主消息上,但如果需要在其他地方使用,则会丢失外壳。创建一个临时变量就可以解决这个问题。这个方法非常有效,有没有办法知道句子中的单词?在本例中,哪一个是
john
,我如何让代码知道这一点?我用第二个示例更新了答案,该示例返回字符串而不是
true/false
值。如果关键字中没有任何正则表达式特殊字符,则该方法非常有效。(如果关键字列表不是很长。)你可以一直这样做。如果没有任何关键字包含任何正则表达式特殊字符,这会非常有效。(如果关键字列表不是很长。)你可以一直这样做。正如我之前所说的,我不想每次都通过数组,因为我每秒收到5条消息——每次收到消息时,代码都会再次运行。然而,我喜欢的是它显示了数组中的单词(在本例中是
john
)。有没有其他更有效的方法?对于其他方法,您也可以使用。像这样的例子
RegExp(['jim','john'].join(“|”).test('Hello john,你今天怎么样?')
正如我前面所说的,我不想每次都通过数组,因为我每秒收到5条消息——每次收到消息,代码都会再次运行。然而,我喜欢的是它显示了数组中的单词(在本例中是
john
)。还有别的吗