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

标签 javascript ecmascript-6

我正在尝试修复有错误的字符串。在字符串中,S 被误解为 5O 被误解为 0I > 被误解为 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/

相关文章:

javascript - 比较两个数组,如果 id 相等则禁用元素

javascript - 为 Bootstrap 单选按钮上的单击/更改添加事件监听器

javascript - 客户端 JWT 基于角色的授权

javascript - ES6早期使用类

javascript - 从 Babel AST 生成 ES6 代码而不是 ES5 代码

javascript - 在没有变量声明的情况下使用异步迭代

javascript - insertHTML 与隐藏元素

javascript - 回复.发送理解吗? (hubot 脚本)

javascript - 使用循环将数组值分配给元素

javascript - 箭头语法 VS ES5 函数范围