首页 > 解决方案 > 如何使用 .join .slice 或 .push 使这个加密器/解密器工作?

问题描述

我正在尝试制作一个加密器/解密器(非常简单),我需要将所有“o”换成“!”,“e”换成“#”,“t”换成“%”,“n”换成“&”。

首先你应该写一个文本,按下一个按钮并加密它,然后一个按钮将它解密为它的原始输入,但我似乎无法让它工作。(我对 JS 非常陌生)。

我目前正在做一个for循环,但如果有更好的建议,我会尝试理解。

    function fResult() {

        var deKey = [
            "o",
            "e",
            "t",
            "n"
        ];

        var str = document.getElementById("text").value;

        var enKey = [
            "!",
            "#",
            "%",
            "&"
        ];

        var resultEn = fEncrypted(str, deKey, enKey);

        document.getElementById("writeText").innerHTML= resultEn;

    }

    function fEncrypted(str, deKey, enKey) {

        var resultKey = []
        str = str.split("", str.length);

        for (var i = 0; i < str.length; i++) {

            if (str[i] == "o") {

                str.slice(str[i]);
            }
            if (str[i] == "e") {

                resultKey.push(enKey[1]);
            }
            if (str[i] == "t") {

                resultKey.push(enKey[2]);
            }
            if (str[i] == "n") {

                resultKey.splice(1, 1, (enKey[3]));
            }

            else {
                resultKey.push(str[i]);
            }

我认为既然我使用if str[i] == "letter"它应该跳过 push on else,但它只是将预期的“加密字母”推到原始字母前面。

标签: javascript

解决方案


else 只适用于最后一个 if。要执行您对 else 的询问,除了第一个和最后一个块之外,您需要使用 else if。我很困惑为什么每个块都不同,如果它们本质上都应该做同样的事情。

        if (str[i] == "o") {

            str.slice(str[i]);
        }
        else if (str[i] == "e") {

            resultKey.push(enKey[1]);
        }
        else if (str[i] == "t") {

            resultKey.push(enKey[2]);
        }
        else if (str[i] == "n") {

            resultKey.splice(1, 1, (enKey[3]));
        }
        else {
            resultKey.push(str[i]);
        }

另外,你能用replace()吗?可以使用具有全局和不区分大小写选项的正则表达式来执行您想要的操作。该链接有一个例子。


推荐阅读