我正试图取一个给定的字符串,并用一个字符替换该字符串中的给定数字。具体而言:
- 5将被替换为";S〃
- 1将被替换为"0";我">
- 0将被替换为"0";O〃
(这是卡塔练习)
我写了一个函数,应该是:
- 获取字符串并将其转换为数组
- 在阵列上循环
- 使用.replacement()将上述数字的每个实例替换为适当的替换项
- 返回连接的字符串
我的代码如下所示
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"))