这是我的代码

const caesar = function(x, y) {
    let alphaListLower = ["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 alphaListUpper = [  '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 userInput = x.split("")

    let result = []

    for(let i = 0; i < userInput.length; i++){
        for(let e = 0; e < alphaListUpper.length; e++){
           

        if (userInput[i] === alphaListLower[e] ){

            if(e+y < 26){
                result.push(alphaListLower[e+y])
            }else{
                result.push(alphaListLower[e+y-26])
            }

        }else if(userInput[i] === alphaListUpper[e] ){

            if(e+y < 26){
                result.push(alphaListUpper[e+y])
            }else{
                result.push(alphaListUpper[e+y-26])
            }
            

        }else if(userInput[i] === "!" || "," || " "){
            result.push(userInput[i])
        }
        }

    
    }

    result = result.join("")

    return result

};

如果我给出了一个论点,"你好,世界!它应该回来了!"

推荐答案

我对你的代码做了一些修改.首先,我们要看看这个条件:

console.log(Boolean(2 === "!" || "," || " "))

无论您用什么来替换2,以上都将始终返回TRUE.原因是,即使第一个条件可能为假,|| "," || " "的计算结果也始终为真.","根本不是一个真实的条件,而是一个真实的表达式,因此在管道操作符之间使用它总是返回TRUE.因此,我猜您会在列表中添加越来越多的字符,而不会实现(<;=字符串中每个字母的额外25倍).

理想情况下,您应该将该条件从内部循环中移出,因为它与字母表无关.把它放在外面.

我对你的代码做了最小的修改,所以改进仍然取决于你.但下面的方法是有效的:

const caesar = function(x, y) {
    let alphaListLower = ["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 alphaListUpper = ["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 userInput = x.split("");
    let result = [];

    for(let i = 0; i < userInput.length; i++){
        let added = false;
        for(let e = 0; e < alphaListUpper.length; e++){
            if (userInput[i] === alphaListLower[e]){
                result.push(alphaListLower[(e + y) % 26]);
                added = true;
                break;
            } else if (userInput[i] === alphaListUpper[e]){
                result.push(alphaListUpper[(e + y) % 26]);
                added = true;
                break;
            }
        }

        // If the character is not a letter and is a special character like !, , or space, add it directly to the result
        if (!added && ["!", ",", " "].includes(userInput[i])) {
            result.push(userInput[i]);
        }
    }

    return result.join("");
}

console.log(caesar("Hello, World!", 2)); // Shift by 2

顺便说一句:你需要移动5个才能得到你想要的结果

Javascript相关问答推荐

Next.js Next/Image图像隐含性有任何类型-如何修复?

如何解决CORS政策的问题

Javascript,部分重排序数组

在nextjs服务器端api调用中传递认证凭证

在服务器上放置了Create Reaction App Build之后的空白页面

如何通过使用vanilla JS限制字体大小增加或减少两次来改变字体大小

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

第一项杀死下一项,直到数组长度在javascript中等于1

打字脚本中方括号符号属性访问和拾取实用程序的区别

如何使用<;Link>;执行与JS Reaction中的";window.Location=/GameOverDied;";类似的操作?

如何使用画布在另一个内部绘制一个较小但相同的形状,同时保持恒定的边界厚度?

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

自动滚动功能在当前图像左侧显示上一张图像的一部分

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?

有角粘桌盒阴影

更改管线时不渲染组件的react

如何格式化API的响应

使用重新 Select 和对象理解 Select 器备忘

对象作为react 子对象无效(已找到:具有键的对象{type,props}).如果要呈现一个子级集合,请改用数组