【问题标题】:JavaScript Letter replacing code, not replacing capitals?JavaScript 字母替换代码,而不是替换大写?
【发布时间】:2021-02-05 02:35:14
【问题描述】:

我正在尝试完成一个 codewars 挑战作为我的练习编码,因为我将进行初学者技术测试以进入编码培训计划。如果您想知道挑战是什么:https://www.codewars.com/kata/530e15517bc88ac656000716/train/javascript

我已经编写了符合预期的代码。我将在下面引用 Codewars.com:

ROT13 是一个简单的字母替换密码,用于替换一个字母 字母表中的字母 13 个字母。 ROT13 是一个 凯撒密码的例子。

创建一个接受字符串并返回加密字符串的函数 与 Rot13。如果包含数字或特殊字符 字符串,它们应该按原样返回。只有来自的信件 拉丁/英文字母应该被移动,就像原来的 Rot13 “实施”。

我的代码获取测试字符串 "grfg" 并将其转换为单词 "test",这相当于字母表中前面的 13 个字母,但是,如果我将字符串作为 "Grfg" 传递,大写为 @987654325 @it 返回"gest" 表示它不会替换大写字母。

如果我以小写形式传递"test",它将返回"grfg",因此它也可以向后工作,但是,如果我传递"Test",它将返回"trfg",而不是再次替换大写字母,而是返回相同的字母。

请在下面找到我写的代码: (请记住,我正在开始编写代码,因此可能有不止几种更有效的代码片段可以做到这一点。)

    function rot13(message){
      let abc = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", 
 "r", "s", "t", "u", "v", "w", "x", "y", "z",   "a", "b",  "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
      let msg = message.split("");
    
      for (let i = 0; i < abc.length; i++){
        for (let j = 0; j < abc.length; j++) {
            if (msg[j] === abc[i]) {
              
              ind = parseInt(abc.indexOf(i), 0) + 13;
              msg[j] = abc.slice(i + 13, i + 14);
                   
          };
        };
      };
      
      return msg.join("").toLowerCase();
    };
    
    rot13("test");

请您帮我弄清楚我的错误是什么或我应该知道什么以确保我的代码将转换字符串而不考虑大写或小写?

提前非常感谢:D

【问题讨论】:

    标签: javascript for-loop


    【解决方案1】:

    您是否尝试过在拆分之前先将message 全部小写?

    let msg = message.toLowerCase().split("");

    【讨论】:

    • 感谢您的建议。我想过这样做,但是,我真正想了解的是为什么不会替换大写字母。 :)
    • 因为abc 数组中根本没有大写字母 :) 比较函数(===)区分大小写。
    • 非常感谢!我只是将 === 更改为 ==,现在该函数没有返回任何内容。
    • aA 是同一种类型,它们都是strings,但是它的ASCI 值不同,所以不管equals 的数量多少总是不同的东西。
    猜你喜欢
    • 2014-01-11
    • 1970-01-01
    • 2021-07-30
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多