修复数字替换字母的字符串中的错误

时间:2017-07-26 22:23:12

标签: javascript ecmascript-6

我正在尝试修复有错误的字符串。在字符串S被误解为5时,O被误解为0I被误解为1

请参阅以下示例。

correct("L0ND0N") => "LONDON"

correct("BUDAPE5T"),"BUDAPEST"

我一直在查看我的代码,并且不知道它为什么不起作用。请参阅下面的代码。

任何人都可以看到我犯的错误吗?

挑战是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('');

}

1 个答案:

答案 0 :(得分:0)

您可以将回调传递给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' }(至少在某些浏览器中,如果不是全部的话)。因为你只是"循环"一次,第一个密钥可以检查并正确更换。通过我发布的修复程序,每个密钥都可以被替换。