2017-09-15 50 views
1

所以我写了一个算法,把一个单词转换成猪拉丁语。这里是。当前两个字母是元音时,猪拉丁算法不起作用

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'语句触发,并且单词'eight'的前两个字母是元音。我不想找到解决方案,因为我想自己弄清楚。我希望有人能向我解释为什么'八'会触发'else if'声明而不是'else'声明。为了澄清,'八'应该返回'八路'(即'其他'声明)。我希望这是有道理的。如果不是,请随时要求澄清。感谢您的帮助!

+0

我不认为'condition'按照您认为的方式工作。请参阅https://stackoverflow.com/a/19161184/2040863 –

+0

'var condition = vowels [0] || ...'和'var condition = vowels [0];'一样'' – dandavis

回答

1

正如John Hascall和dandavis所评论的那样,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,在“或”序列中的第一个“truthy”变量,或者遇到,如果都是最后一个变量“falsey。”