IndexOf和多数组

八神

我有这个代码的问题。此代码应返回“室内装饰学习”,但始终返回“室内装饰学习”,我在做什么错?

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章