我有这个代码的问题。此代码应返回“室内装饰学习”,但始终返回“室内装饰学习”,我在做什么错?
var forbidden = "home decor learn";
var items = [
["decor", "decoration"],
["learn", "learning"],
["home", "interior"],
];
for(i = 0; i<items.length; i++){
if(forbidden.indexOf(items[i][0])){
forbidden = forbidden.replace(items[i][0], items[i][1]);
}
}
document.write(forbidden);
谢谢,
forbidden.indexOf(items[i][0])
返回匹配的位置,-1
如果没有匹配,则返回。这意味着当没有匹配项或字符串开头以外的任何地方存在匹配项时,这是事实。它唯一地返回假值是当它与字符串的开头匹配并返回时0
(如"home"
您的情况)。
要indexOf
用作测试以查看字符串是否包含值,您需要测试以检查其是否返回了值-1
或任何其他数字(例如,您可以使用诸如!== -1
或的条件>= 0
)。在现代JavaScript引擎中或具有非常简单的SHIM的情况下,您可以使用String.prototype.includes代替,它返回布尔值并更好地表示您的意图。
就您而言,您根本不需要if
声明。只需执行替换操作,并在无法找到替换模式的情况下依靠替换为空操作这一事实:
var forbidden = "home decor learn";
var items = [
["decor", "decoration"],
["learn", "learning"],
["home", "interior"],
];
for(i = 0; i<items.length; i++){
forbidden = forbidden.replace(items[i][0], items[i][1]);
}
document.write(forbidden);
注意:String.prototype.replace仅在将string或非全局正则表达式用作替换模式时替换第一个匹配项。这意味着您的代码将允许使用禁止的单词,只要该单词至少出现两次即可。解决方法超出了此答案的范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句