我无法将这些转换为大写

时间:2016-10-02 18:07:58

标签: javascript arrays

在我的代码中,我试图测试数组元素是否为数字,如果是数字,则将其设置为自身并转到数组的下一部分。如果它不是一个数字,那么检查该字母是否为大写。如果它的大写将它设置为对象中它的大写值,并且如果它不保持它的对象的小写值。但现在代码不会将其更改为其对象字母或保留它们的资本。注释后的代码可以将其转换为对象组件,但不能将其保留为大写。请查看我的代码并告诉我我做错了什么。这一点是将数组更改为相反的字母(a = z b = y等),并保持其大写属性。

        function main() {
            var get = document.getElementById("in").value;
            var ina = [...get];
            var script = {
                a: "z",
                b: "y",
                c: "x",
                d: "w",
                e: "v",
                f: "u",
                g: "t",
                h: "s",
                i: "r",
                j: "q",
                k: "p",
                l: "o",
                m: "n",
                n: "m",
                o: "l",
                p: "k",
                q: "j",
                r: "i",
                s: "h",
                t: "g",
                u: "f",
                v: "e",
                w: "d",
                x: "c",
                y: "b",
                z: "a",
                " ": " "
            };
            for(i = 0; i < ina.length; i++) {
                var x = isNaN(ina[i]);
                var y = ina[i];
                if(x) {
                    if(y == y.toUpperCase()) {
                        y = script[y];
                        y = y.toUpperCase();
                    } else {
                        y = script[y];
                    };
                } else {
                    y = script[y];
                };
            };
            var outa = ina.join("");
            document.getElementById("out").value = outa;

    };
        /* for(i = 0; i < ina.length; i++) {
                ina[i] = script[ina[i] || ina[i]];
            };

            var outa = ina.join("");
            document.getElementById("out").value = outa;

        };
        */

2 个答案:

答案 0 :(得分:1)

您应该在某个时刻将y分配给ina[i],这当前没有发生。此外,当y.toUpperCase()已经是大写时,您应用y

我还建议放弃isNaN测试。最好测试角色是否在script中有翻译,如果没有,则保持角色不变。

以下是建议的循环:

for(var i = 0; i < ina.length; i++) {
    var y = script[ina[i].toLowerCase()] || ina[i];
    if (ina[i] == ina[i].toUpperCase()) y = y.toUpperCase();
    ina[i] = y;
}

答案 1 :(得分:0)

您应该设置y时,将临时变量ina[i]设置为所需的字母。试试这个:

                if(y == y.toUpperCase()) {
                    ina[i] = script[y].toUpperCase();
                } else {
                    ina[i] = script[y];
                };