结束后继续在阵列上循环

时间:2019-02-21 17:33:22

标签: javascript

我有一个长度为26的数组,每个元素都是字母。我的N也可以是-10到10。 N接受字母并以此方式对其进行更改。 如果我的字母为'a'且N = 2,则我的'a'将变为'c';如果我的字母为'c'且N = -1,则我的'c'将变为'b'。

当我有一个像'z'这样的字母,它是数组的最后一个元素,并且给N一个值时,它返回未定义的值。

如何使其继续在阵列上循环。例如,如果我的字母是“ y”且N = 5,那么它将给我一个“ d”。希望你了解我xD。

2 个答案:

答案 0 :(得分:2)

这称为Caesar shift问题,其中我们根据给定的移位计数(N)来移位字母。

我们必须使用str.charCodeAtString.fromCharCode方法来解决此问题。

function caesarShift(str, amount) {

    // Wrap the amount
    if (amount < 0)
        return caesarShift(str, amount + 26);

    // Make an output variable
    var output = '';

    // Go through each character
    for (var i = 0; i < str.length; i++) {

        // Get the character we'll be appending
        var c = str[i];

        // If it's a letter...
        if (c.match(/[a-z]/i)) {

            // Get its code
            var code = str.charCodeAt(i);

            // Uppercase letters
            if ((code >= 65) && (code <= 90))
                c = String.fromCharCode(((code - 65 + amount) % 26) + 65);

            // Lowercase letters
            else if ((code >= 97) && (code <= 122))
                c = String.fromCharCode(((code - 97 + amount) % 26) + 97);

        }

        // Append
        output += c;

    }

    // All done!
    return output;

};

在链接上尝试有效的解决方案-https://jsitor.com/5GG7XuWUk

答案 1 :(得分:0)

在循环中添加一个if语句。

if (i + N > alphabet.Length) alphabet[i] = alphabet[N+i - alphabet.Length]