如何在for循环中使用Javascript.replace()方法



我正试图取一个给定的字符串,并用一个字符替换该字符串中的给定数字。具体而言:

  • 5将被替换为";S〃
  • 1将被替换为"0";我">
  • 0将被替换为"0";O〃

(这是卡塔练习)

我写了一个函数,应该是:

  1. 获取字符串并将其转换为数组
  2. 在阵列上循环
  3. 使用.replacement()将上述数字的每个实例替换为适当的替换项
  4. 返回连接的字符串

我的代码如下所示

Function correct(string) {
let array = string.split('')
for (let i = 0; i < array.length; i++) {
array[i].replace('5', 'S')
array[i].replace('0', 'O')
array[i].replace('1', 'I')
}
return array.join('');
}

该函数返回的字符串与最初提供的字符串完全相同,没有变化。我怀疑我的问题是在循环中使用.replace()方法的方式,或者声明的索引位置。

String.prototype.replace返回一个新字符串,并且不会改变执行该字符串的变量。这就是为什么您需要将替换的结果分配到某个位置。

要修复您的代码,只需对每个替换执行以下操作:

array[i] = array[i].replace('5', 'S');

注意1:由于array[i]始终是单个字符,因此在replace中没有必要,因为您可以像这样进行比较:

if (array[i] === '5') {
array[i] = 'S';
}

或oneliner:

array[i] = array[i] === '5' ? 'S' : array[i];

注2:用于替换的for循环不是一个干净的代码。JavaScript非常灵活,为这个问题提供了更好的解决方案。例如String.prototype.replaceAll

试试这个

const inputStr = 'AB5DE0G1H';
function correct(string) {
return  string.replaceAll('5', 'S').replaceAll('0', 'O').replaceAll('1', 'l')
}
console.log(correct(inputStr));

您可以根据密钥=>使用简单的正则表达式replace();像这样的值,

const key_to_replace = { 
'5': 'S',
'1': 'I',
'0': 'O'
}
const correct = (str) => 
str.replace(/./g, (m) => key_to_replace[m] ?? m);
console.log(correct("this 5is a0 test1 with 55abc"))

最新更新