Довольно новичок в программировании, поэтому любая помощь приветствуется.
Меня просят создать функцию, которая возвращает строку с заданным сдвигом по алфавиту. Например: function caesar('a', 1)
должен возвращать b .
Сдвиг должен сохранять заглавные буквы, не должен сдвигать пунктуацию, должен переноситься вокруг алфавита, и отрицательные числа должны работать.
Я мог бы сделать все вышеперечисленное, за исключением использования заглавных букв, следующим образом:
const caesar = function(string,shift) {
let stringSplitted = string.split('');
let cypher = [];
stringSplitted.map( letter => {
if (letter === ' ' || letter === ',' || letter === '!' || letter === '.') {
return cypher.push(letter);
}
let index = alphabet.indexOf(letter);
if (index + shift > 25) {
cypher.push(alphabet[(index + shift) - alphabet.length])
}
else if(index + (shift)<0) {
return cypher.push(alphabet[(index + shift) + alphabet.length])
}
else
cypher.push(alphabet[index + shift]);
})
return cypher.join('')
}
Я знаю, что это довольно грязно. Каждый раз, когда я добавляю в строку заглавные буквы, результат выходит из-под контроля
Я пробовал это
if (letter === letter.toLowerCase())
return cypher.push(alphabet[index + shift].toUpperCase())
, но он возвращает индекс, а сдвиг не определен