Caesar Cypher Javascript (из проекта Odin)

#javascript

#javascript

Вопрос:

Я все еще изучаю JS и хотел выполнить это упражнение без копирования, но теперь я застрял…Я знаю, что есть много других вещей, которые нужно исправить, но на данный момент …. Я не знаю, почему эта функция не позволяет пустым пространствам быть?

** Функция принимает строку для кодирования и коэффициент сдвига, а затем возвращает закодированную строку:

caesar(‘A’, 1) // просто сдвигает букву на 1: возвращает ‘B’ шифр должен сохранять заглавные буквы:

caesar(‘Hey’, 5) // возвращает ‘Mjd; не следует менять пунктуацию:

caesar(‘Привет, мир!’, 5) //возвращает ‘Mjqqt, Btwqi!’

     const caesar = function (word, x) {
      const alpha = "abcdefghijklmnopqrstuvwxyz".split("")
      const alphaUp = "abcdefghijklmnopqrstuvwxyz".toUpperCase().split("")
      const newString = []
      for (const l in word) {
        console.log(word[l])
        console.log(typeof word[l])
        if (word[l] === word[l].toUpperCase()) {
          const index2 = alphaUp.findIndex(b => b == word[l])
          newString.push(alphaUp[index2   x])
        }
        else if (word[l] === " ") {
          newString.push(word[l])
        }
        else if (word[l] === word[l].toLowerCase()) {
          const index = alpha.findIndex(a => a == word[l])
          newString.push(alpha[index   x])
        }


      }
      console.log(newString.join(""))
    }
    caesar("Hello world!", 5)

  

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

1. Привет и добро пожаловать в Stack Overflow, не могли бы вы добавить к своему вопросу ожидаемый результат?

2. @MartinPaucot готово, спасибо 🙂

Ответ №1:

Возьмем случай, когда вы достигаете пробела " " в вашем цикле for, первая проверка

if (word[l] === word[l].toUpperCase())

Запуск .toUpperCase() при " " возврате " " , таким образом, вы выполняете свою логику для прописных букв и никогда не достигаете проверки, является ли это пробелом else if . Изменение логического порядка на этот работает так, как вы предполагаете

 if (word[l] === " ") {
  newString.push(word[l])
}
else if (word[l] === word[l].toUpperCase()) {
  const index2 = alphaUp.findIndex(b => b == word[l])
  newString.push(alphaUp[index2   x])
} // rest of the code after
  

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

1. О, да, конечно, я попробовал это, и это сработало! Спасибо!