for (var z = 0; z < spells[0].vars.length; z++) {
if (spells[0].sanitizedTooltip.indexOf(spells[0].vars[z].key) > -1) {
var key = spells[0].vars[z].key;
sanitizedOut = spells[0].sanitizedTooltip.replace("{{ " + key + " }}", spells[0].vars[z].coeff);
}
}
这段代码旨在替换字符串中的多个“键”。但是,只有最后一次出现被替换。
投掷匕首造成{{e2}}(+ {{a1}})魔法伤害。匕首 弹跳到4个最接近的敌人,每个敌人造成的伤害降低10% 弹跳。被击中的敌人标记为4秒。卡塔琳娜的基本攻击 或法术将消耗处理{{e3}}(+ {{a2}})的标记 额外的魔法伤害。
这是sanitizedTooltip
。 spells[0].vars
是:
[ { key: 'a1', link: 'spelldamage', coeff: [ 0.45 ] },
{ key: 'a2', link: 'spelldamage', coeff: [ 0.15 ] } ]
但是,此for循环的结果仅返回:
投掷匕首造成{{e2}}(+ {{a1}})魔法伤害。匕首 弹跳到4个最接近的敌人,每个敌人造成的伤害降低10% 弹跳。被击中的敌人标记为4秒。卡塔琳娜的基本攻击 或法术将使用额外处理{{e3}}(+0.15)的标记 魔法伤害。
...其中{{a1}}预计为+0.45。提前谢谢!
答案 0 :(得分:0)
循环的每次迭代都在原始spells[0].sanitizedTooltip
上运行。每次通过时,sanitizedOut
都会重新分配最新迭代的结果,因此当循环退出时,您只能看到最后的结果。
答案 1 :(得分:0)
为了帮助您在一次调用中替换所有匹配项,您可以构建一个递归函数,如下所示:
function replaceAll(value, oldChar, newChar) {
if (value.indexOf(oldChar) > -1) {
value = value.replace(oldChar, newChar);
return replaceAll(value, oldChar, newChar);
} else {
return value;
}
}
var s = "A B A B A B A B";
s = replaceAll(s, "A" , "X");
alert(s);
结果将是:X B X B X B X B