我遇到麻烦,试图检查字符串从数组中的单词,如果它包含单词替换它们。
var blocked = [
"inappropriate word one",
"inappropriate word two",
];
var message = "the message has an inappropriate word one";
if (blocked.some(string => message.includes(string))) {
message = message.replace(string, "blocked")
}
在if
的主体中,变量string
不再可用,因为它仅在some
的回调中有效。因此,只需循环blocked
单词并执行替换。
blocked.forEach(string => {
if (message.includes(string)) message = message.replace(string, "blocked");
})
原则上检查是不必要的。如果字符串中不包含搜索值,则不会替换任何内容,因此您可以执行以下操作:
blocked.forEach(string => {
message = message.replace(string, "blocked");
})
但是要注意,String::replace(search, replacement)
只替换search
的第一个出现,如果它是一个字符串。所以如果你的"坏词"出现多次,则只会替换第一次出现的。因此,最好将阻塞的单词定义为regex,因为这样可以替换多次出现的单词。
var replacements = [
/badwordone/gi,
/badwordtwo/gi
]
replacements.forEach(r => {
message = message.replace(r, "blocked");
})
您正在使用message.replace(string)
,但是string
没有在该some()
方法的范围之外定义。它只在some()
方法内部可用,在外部不可用。因此你的代码不能工作。