Алгоритм Pig Latin не работает, когда первые две буквы являются гласными

1

Поэтому я написал алгоритм, который берет слово и преобразует его в Pig Latin. Вот.

function translatePigLatin(str) {
var vowels = ['a','e','i','o','u']
var splitStr = str.split('');
var newStr = '';
var condition = vowels[0] || vowels[1] || vowels[2] || vowels[3] || vowels[4];
if(splitStr[0] !== condition && splitStr[1] == condition){
  splitStr.push(splitStr[0] + 'ay');
  splitStr.shift();
  newStr = splitStr.join('');
  console.log('first');

} else if (splitStr[0] !== condition && splitStr[1] !== condition) {
  splitStr.push(splitStr[0] + splitStr[1] + 'ay');
  splitStr.shift();
  splitStr.shift();
  newStr = splitStr.join('');
  console.log('second');

} else {
  splitStr.push('way');
  newStr = splitStr.join('');
  console.log('third');
}
console.log(newStr);
}

translatePigLatin("eight");
translatePigLatin("california");
translatePigLatin("paragraphs");
translatePigLatin("glove");
translatePigLatin("algorithm");

Весь результат правильный, за исключением "восьмерки". По какой-то причине он вызывает выражение "else if", когда он должен запускать оператор "else". Я думаю, это потому, что оператор "else if" запускается, когда первая и вторая буквы слова не являются гласными, а первые две буквы слова "восемь" являются гласными. Я не ищу решения, так как хотел бы сам это понять. Я надеялся, что кто-то может объяснить мне, почему "восьмерка" запускает оператор "else if", а не оператор "else". Чтобы уточнить, "восьмерка" должна быть возвращена как "восемь" (т.е. Заявление "else"). Надеюсь, что это имеет смысл. Если нет, не стесняйтесь просить разъяснений. Спасибо за помощь!

  • 0
    Я не думаю, что condition работает так, как вы думаете. См. Stackoverflow.com/a/19161184/2040863
  • 0
    var condition = vowels[0] || ... то же самое, что и просто var condition = vowels[0];
Теги:
algorithm

1 ответ

1
Лучший ответ

Как прокомментировал Джон Хэсколл и Дандавис, condition может не работать так, как вы ожидаете.

Этот оператор splitStr[0] !== condition является очень образным синтаксисом (это имеет смысл и заставляет меня понять способ поддержки/взломать его :).

В JS вы найдете что-то вроде vowels.includes(splitStr[0]) и !vowels.includes(splitStr[0]) возможно, лучше выполнить сравнения, которые вы пытаетесь сделать.

Утверждение, condition = vowels[0] || vowels[1] || vowels[2] || vowels[3] || vowels[4] condition = vowels[0] || vowels[1] || vowels[2] || vowels[3] || vowels[4] condition = vowels[0] || vowels[1] || vowels[2] || vowels[3] || vowels[4], просто присваивает переменной, condition, первой "правдивой" переменной в "или" последовательности или последней переменной, с которой она сталкивается, если все "ложны".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню