Не могу понять почему не работает replace, задача с freecodecamp(дана фраза, в словах которой, буквы из первой половины алфавита нужно заменить на буквы второй половины алфавита соответственно т.е А=N, B=O и т.д), все решения связанные с этой задачей были через charCodeAt(),можно ли вообще решить эту задачу через replace?
function rot13(str) {
const alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const half1 = alfabet.split('');
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M"]
const half2 = half1.splice(0,13);
// ["N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
const myStr = str.split(' ');
for(let myShifrWords of myStr){
for(let i=0; i<myShifrWords.length;i++){
let e = myShifrWords[i];
function repl(e){
if(half1.indexOf(e)!==-1){
return half1[half2.indexOf(e)];
} else if(half2.indexOf(e)!==-1){
return half2[half1.indexOf(e)]
}
}
return myShifrWords.replace(e, repl);
}
}
}
rot13("SERR CVMMN!")
function rot13(str) {
var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var map = Object.create(null);
for (var q = 0; q < alphabet.length; ++q) {
map[alphabet[q]] = alphabet[(q + 13) % alphabet.length];
}
return str.replace(/./g, m => map[m] || m);
}
console.log(rot13("SERR CVMMN!"));
А можно ещё и так.
function replace(str) {
return str.replace(/[A-Z]/gi, function(letter) {
var c = letter.charCodeAt(0);
return String.fromCharCode((c - 65 >= 13) ? c - 13 : c + 13);
});
}
console.log(replace("SERR CVMMN!"));
Короткое описание: берём букву из нужного слова, смотрим в какой она части алфавита (в первой или второй), если первая - по коду ASCII таблицы прибавляем 13 (кол-во букв в половине алфавита) и получаем "параллельную" букву, и наоборот, если буква из второй части алфавита.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости