JavaScript简单亵渎过滤器

JavaScript简单亵渎过滤器,javascript,Javascript,嗨,我想用JavaScript创建非常基本的亵渎过滤器 我有一个名为坏词的数组,还有一个名为描述的常量。我不想检查描述中是否包含任何不好的词 这就是我到目前为止所做的 const baddwords=[“唐纳德·特朗普”、“伯恩斯先生”、“萨坦”]; const description=“伯恩斯先生进入大厅。” 让isInclude=false; 坏词。forEach(词=>{ if(说明.包括(文字)){ isInclude=true } }) log(`Is include`,isIncl

嗨,我想用JavaScript创建非常基本的亵渎过滤器

我有一个名为
坏词
的数组,还有一个名为
描述
的常量。我不想检查
描述中是否包含任何不好的词

这就是我到目前为止所做的

const baddwords=[“唐纳德·特朗普”、“伯恩斯先生”、“萨坦”];
const description=“伯恩斯先生进入大厅。”
让isInclude=false;
坏词。forEach(词=>{
if(说明.包括(文字)){
isInclude=true
}
})
log(`Is include`,isInclude)
使用
some()
-一旦找到与条件匹配的项,它就会从循环中退出,因此比循环性能更好

let isInclude = badWords.some(word => description.includes(word));

以下是regexp解决方案的外观:

//https://stackoverflow.com/a/3561711/240443
const-reEscape=s=>s.replace(/[-\/\^$*+?.();[\]{}]/g,'\$&');
//只需要做一次
const baddwords=[“唐纳德·特朗普”、“伯恩斯先生”、“萨坦”];
const badWordsRE=newregexp(badWords.map(reEscape.join)(“|”);
//测试是快速和容易的
console.log(“伯恩斯先生进入大厅。”.match(badWordsRE));//“伯恩斯先生”
console.log(“没有什么不合适的”。匹配(badWordsRE));//空
使用try-catch

const badWords = ['Donald Trump', 'Mr.Burns', 'Sathan']

const description = 'Mr.Burns entered to the hall.'
let isInclude = false
try {
  badWords.forEach(word => {
    if (description.includes(word)) {
      isInclude = true
      throw new Error(word)
    }
  })
} catch (e) {
  console.log(e)
}

为什么在一个数据集的多个值上循环是一个“问题”?还有…?你只是在理论上关心性能(提示:不要),或者你有任何实际的迹象表明这会使事情变得可测量或明显缓慢吗?你可以在找到一个匹配项后立即缩短此迭代。使用
.some
而不是
.forEach
…看起来您真的在考虑大量坏字(字符串)的性能。在这种情况下,我建议看一下正则表达式,因为一个正则表达式可以完成多个(希望更多)坏单词的相同任务。我自己的大部分正则表达式工作都使用正则表达式,这是一个很有价值的学习工具。@JohnDunne为了强调JohnDunne说的,正则表达式还可以帮助更好地捕捉“坏”字的变化,所以它们不必是列表上的多个项目。为什么唐纳德·特朗普?