首页 > 解决方案 > JavaScript 用 for 循环替换字符

问题描述

这是一个使用 for 循环和 if 语句将字符串的字符替换为另一个字符串的简单程序。但是,我没有得到想要的结果。这是代码:

var str1 = "Optimism is the key to victory"

var str2 = ""

for(let i=0; i<str1.length;i++){
  if(str1[i] == "i"){
    var temp = str1[i]
    temp = "1"
    str2 += temp
  }
  if(str1[i] == "e"){
    var temp2 = str1[i]
    temp2 = "3"
    str2 += temp2
  }
  else{
    str2 += str1[i]
    }
 }
console.log(str2)

结果是这样的:“Opt1im1ism 1is th3 k3y to v1ictory” 为什么它会在 '1' 之后添加另一个 'i' 以及如何删除它?(感谢您提前回复!)

标签: javascript

解决方案


你有

if (...) {
  ...
}
if (...) {
  ...
}
else {
  ...
}

第一个if不与后面的两个块链接 - 只要满足第一个条件,其他条件之一也必然会满足,导致在str2一次迭代中连接到两次而不是一次。

使用else/if代替。

var str1 = "Optimism is the key to victory"

var str2 = ""

for (let i = 0; i < str1.length; i++) {
  if (str1[i] == "i") {
    var temp = str1[i]
    temp = "1"
    str2 += temp
  } else if (str1[i] == "e") {
    var temp2 = str1[i]
    temp2 = "3"
    str2 += temp2
  } else {
    str2 += str1[i]
  }
}
console.log(str2)

更优雅:

var str1 = "Optimism is the key to victory"

var str2 = ""

for (let i = 0; i < str1.length; i++) {
  if (str1[i] == "i") {
    str2 += "1"
  } else if (str1[i] == "e") {
    str2 += "3"
  } else {
    str2 += str1[i]
  }
}
console.log(str2)

或者放弃这些指标,它们并没有太大帮助:

var str1 = "Optimism is the key to victory"

var str2 = ""

for (const char of str1) {
  if (char == "i") {
    str2 += "1"
  } else if (char == "e") {
    str2 += "3"
  } else {
    str2 += char
  }
}
console.log(str2)

甚至

const str1 = "Optimism is the key to victory"
const str2 = str1.replace(/[ie]/g, char => char === 'i' ? '1' : '3');
console.log(str2)


推荐阅读