JavaScript简单亵渎过滤器
嗨,我想用JavaScript创建非常基本的亵渎过滤器 我有一个名为JavaScript简单亵渎过滤器,javascript,Javascript,嗨,我想用JavaScript创建非常基本的亵渎过滤器 我有一个名为坏词的数组,还有一个名为描述的常量。我不想检查描述中是否包含任何不好的词 这就是我到目前为止所做的 const baddwords=[“唐纳德·特朗普”、“伯恩斯先生”、“萨坦”]; const description=“伯恩斯先生进入大厅。” 让isInclude=false; 坏词。forEach(词=>{ if(说明.包括(文字)){ isInclude=true } }) log(`Is include`,isIncl
坏词
的数组,还有一个名为描述
的常量。我不想检查描述中是否包含任何不好的词
这就是我到目前为止所做的
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说的,正则表达式还可以帮助更好地捕捉“坏”字的变化,所以它们不必是列表上的多个项目。为什么唐纳德·特朗普?