我正在尝试修复有错误的字符串。在字符串中,S
被误解为 5
,O
被误解为 0
和 I
> 被误解为 1
。
请参阅以下示例。
正确(“L0ND0N”)=>“伦敦”
正确(“BUDAPE5T”),“布达佩斯”
我多年来一直在查看我的代码,但不知道为什么它不起作用。请参阅下面的代码。
有人能看出我犯了什么错误吗?
挑战是 taken from here .
function correct(string){
let fix = {
"5": "S",
"1": "I",
"0": "O"
}
let strArr = string.split("");
return strArr.map(item => {
for(var key in fix){
if(item === key){
return fix[key]
} else {
return item;
}
}
}).join('');
}
最佳答案
您可以将回调传递给 String.replace 这将使此任务变得更容易:
function correct(str) {
let fix = {
"5": "S",
"1": "I",
"0": "O"
};
return str.replace(/(\d)/g, a => fix[a] || a);
}
console.log(correct("BUDAPE5T"));
对于您原来的问题,您的 for 循环不是循环,但您在第一次迭代时返回。将其更改为
return strArr.map(item => {
let f;
for(var key in fix){
if(item === key){
f = fix[key]
} else {
f = item;
}
}
return f;
}).join('');
它也可以工作(但最好使用替换功能)。
旁注:
Superdrac 认为原始代码有效,因为它实际上适用于“L0ND0N”。这是一个有趣的“巧合”,因为 fix
对象的键的排序方式如下 { '0': 'O', '1': 'I', '5': 'S' }
(至少在某些浏览器中,如果不是全部的话)。由于您仅“循环”一次,因此可以正确检查并替换第一个键。通过我发布的修复,每个 key 都可以更换。
关于javascript - 修复字符串中数字替换字母的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45338405/