#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];
};