Почему я получаю символы вместо символов при использовании String.fromCharCode?
Первый раз задавая вопрос - я нуб - я не смог найти решение этой конкретной проблемы.
Цель состоит в том, чтобы расшифровать шифр Цезаря. Мой код работает до такой степени, что в массив помещаются правильные буквенные коды. Я могу вручную превратить этот массив в правильную строку следующим образом:
String.fromCharCode(89, 79, 85, 32, 68, 73, 68, 32, 73, 84, 33);
Но когда я пытаюсь превратить массив в строку, вот так:
return String.fromCharCode(arr.join(", "));
это возвращает \u0000 - который я собираю, является нулевым символом Unicode.
Кто-нибудь может объяснить, что происходит?
Вот мой полный код:
function rot13(str) {
var arr = [];
for (var i = 0; i < str.length; i++){
if (str.charCodeAt(i) > 77 && str.charCodeAt(i) < 91){
arr.push(str.charCodeAt(i) - 13);
} else if (str.charCodeAt(i) <=77 && str.charCodeAt(i) > 64) {
arr.push(str.charCodeAt(i) + 13);
} else {
arr.push(str.charCodeAt(i));
}
}
console.log(arr);
return String.fromCharCode(arr.join(", "));
}
rot13("LBH QVQ VG!");
String.fromCharCode(89, 79, 85, 32, 68, 73, 68, 32, 73, 84, 33);
1 ответ
Решение
arr.join(',')
не будет расширяться до списка аргументов функции. Вам либо нужно использовать Function.apply (.apply(null, arr)
) или если у вас есть ES6, используйте оператор распространения:
return String.fromCharCode(...arr);
или же
return String.fromCharCode.apply(null, arr);
function rot13(str) {
var arr = [];
for (var i = 0; i < str.length; i++){
if (str.charCodeAt(i) > 77 && str.charCodeAt(i) < 91){
arr.push(str.charCodeAt(i) - 13);
} else if (str.charCodeAt(i) <=77 && str.charCodeAt(i) > 64) {
arr.push(str.charCodeAt(i) + 13);
} else {
arr.push(str.charCodeAt(i));
}
}
return String.fromCharCode.apply(null, arr);
}
console.log(rot13("LBH QVQ VG!"));