Я не могу преобразовать их в верхний регистр

#javascript #arrays

#javascript #массивы

Вопрос:

В моем коде я пытаюсь проверить, является ли элемент массива числом, и если это число, то установите его на себя и перейдите к следующей части массива. Если это не число, проверьте, является ли буква заглавной. Если его заглавная буква устанавливает его в значение заглавной буквы в объекте, и если это не так, сохраните его в нижнем регистре его объекта. Но теперь код не изменит его на букву объекта или сохранит их заглавными. Закомментированный код может перевести его в объектный компонент, но не сохранить его заглавным. Просто, пожалуйста, просмотрите мой код и скажите мне, что я делаю неправильно. Смысл этого в том, чтобы изменить массив на противоположные буквы (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;

        };
        */
  

Комментарии:

1. Вы вызываете y = y.toUpperCase(); именно ту ветку, в которой вы тестировали, которая y уже прописная

2. Вы никогда ничего не изменяете ina . Единственными переменными, которым вы присваиваете, являются x и y и их значения теряются при каждой новой итерации. Таким образом, весь for цикл не имеет смысла.

Ответ №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. Если вы проверяете, проверяя, не изменяется ли оно при вызове toUpperCase , вы можете полностью пропустить тест 🙂

2. Ах, я запутался. Это была только проблема в скрипте OP, который имел var y = ina[i];

Ответ №2:

Вы продолжаете устанавливать временную переменную y на нужную букву, когда вы должны устанавливать ina[i] . Попробуйте это:

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