Javascript 检查字符串数组中出现哪些关键字(10k个单词)的最有效方法?

Javascript 检查字符串数组中出现哪些关键字(10k个单词)的最有效方法?,javascript,node.js,arrays,search,Javascript,Node.js,Arrays,Search,我有几个由100个字符串组成的数组,其中包含我使用fetch检索到的注释。(称为comments)和另一个包含10000个关键字的数组。(称为关键字) 对于数组中的每个注释,我想检查它包含哪些关键字。(我需要知道它包含的所有关键字,但不需要知道它出现了多少次) 最快的方法是什么 我已经尝试了彼此之间的forEach循环: keywords.forEach(word => { comments.forEach(comment => { if(comment.inc

我有几个由100个字符串组成的数组,其中包含我使用fetch检索到的注释。(称为
comments
)和另一个包含10000个关键字的数组。(称为
关键字

对于数组中的每个注释,我想检查它包含哪些关键字。(我需要知道它包含的所有关键字,但不需要知道它出现了多少次)

最快的方法是什么

我已经尝试了彼此之间的
forEach
循环:

keywords.forEach(word => {
    comments.forEach(comment => {
       if(comment.includes(word)) //call a function
    }
})
for(i = 0; i < keywords.length; i++) {
    for(j = 0; j < comments.length; j++){
         if(comments[j].includes(keywords[i])) //call a function
    }
}
以及相互之间的循环的

keywords.forEach(word => {
    comments.forEach(comment => {
       if(comment.includes(word)) //call a function
    }
})
for(i = 0; i < keywords.length; i++) {
    for(j = 0; j < comments.length; j++){
         if(comments[j].includes(keywords[i])) //call a function
    }
}
这些都对我最初测试的10个关键词起到了作用,但是很明显,如果有10000个关键词的话,这将需要更长的时间。最有效的方法是什么

这对我来说是全新的,所以我有可能错过了一些明显的东西


谢谢

尝试使用
集合
。我已经用
关键字
数组创建了一个
集合
,现在对于
注释
数组中的每个单词,我可以在
集合
中查找是否包含该单词

const关键字=[“java”、“golang”、“python”、“ruby”];
const comments=[“我爱java”,“Golang是谷歌的”,“Python咬了我一口”];
const hash=new Set(关键字.map((k)=>k.toLowerCase());
const test=(w)=>console.log(w);
评论。forEach((c)=>
c、 split(“”).forEach((w)=>hash.has(w.toLowerCase())&测试(w))

);@Nathanel你能测试一下这个,让我知道这个性能是否足够。我刚刚试过这个,它似乎工作得很好。我会做更多的测试来比较速度,但这看起来不错。谢谢大家!@纳撒内尔很高兴它有帮助,你可以考虑接受它作为其他人受益的答案。嗨,欢迎你这么说,你是对的,基本上嵌套循环对于时间性能是有害的,如果你有大的输入(即O(N2)见Bigo符号)。通过将关键字转换为对象,可以避免这种嵌套循环并缩短时间。看到这个答案,我想它会帮助你-谢谢。转换为对象并使用索引是一个好主意。我也会试试这一款,看看它有什么不同。