Поэтому я написал алгоритм, который берет слово и преобразует его в 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"). Надеюсь, что это имеет смысл. Если нет, не стесняйтесь просить разъяснений. Спасибо за помощь!
Как прокомментировал Джон Хэсколл и Дандавис, 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
, первой "правдивой" переменной в "или" последовательности или последней переменной, с которой она сталкивается, если все "ложны".
condition
работает так, как вы думаете. См. Stackoverflow.com/a/19161184/2040863var condition = vowels[0] || ...
то же самое, что и простоvar condition = vowels[0];