所以我写了一个算法,把一个单词转换成猪拉丁语给你。

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");

所有的结果都是正确的,除了“8”。出于某种原因,它导致“else if”语句在应该触发“else”语句时触发。我认为这是因为“else if”语句在单词的第一个和第二个字母不是元音时触发,而单词“8”的前两个字母是元音。我不是在寻找解决办法,因为我想自己解决这个问题我希望有人能向我解释为什么“8”会触发“else if”语句,而不是“else”语句。为了澄清,“8”应返回为“eightway”(即“else”语句)我希望这是有道理的。如果没有请随时要求澄清谢谢你的帮助!

最佳答案

正如John Hascall和dandavis评论的那样,condition可能没有按您预期的方式工作。
这个语句是一个非常富有想象力的语法(这种语法很有意义,让我想找出一种支持/破解它的方法:)。
在JS中,您会发现,splitStr[0] !== conditionvowels.includes(splitStr[0])可能更好地执行您正在努力进行的比较。
语句!vowels.includes(splitStr[0])只需分配变量condition = vowels[0] || vowels[1] || vowels[2] || vowels[3] || vowels[4],“或”序列中的第一个“truthy”变量,或者如果所有变量都是“错误的”,则分配它遇到的最后一个变量。

关于javascript - 当前两个字母是元音时,Pig Latin算法不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46232381/

10-10 22:48