[英]Using String.replace in a for loop
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。 提前致谢!
循环的每次迭代都对原始的spells[0].sanitizedTooltip
。 每次通过, sanitizedOut
都会重新分配最新迭代的结果,因此,当循环退出时,您只会看到最后一个结果。
为了帮助您替换单个调用中的所有事件,您可以构建一个递归函数,如下所示:
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);
结果将是: XBXBXBXB
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.