簡體   English   中英

在for循環中使用String.replace

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM