当前两个字母是元音时,Pig Latin算法不起作用

javascript algorithm

50 观看

1回复

41 作者的声誉

所以我写了一个算法,将一个单词转换成Pig 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");

除“ 8”以外,所有结果均正确。由于某种原因,它会在应触发“ else”语句时触发“ else if”语句。我认为这是因为“ else if”语句在单词的第一个和第二个字母不是元音,而单词“八个”的前两个字母是元音时触发。我不是要寻找解决方案,因为我想自己弄清楚。我希望有人能向我解释为什么“八”会触发“否则”语句,而不是“其他”语句。为了明确起见,应将“八”作为“八分”(即“其他”陈述)返回。我希望这是有道理的。如果没有,请随时要求澄清。谢谢您的帮助!

作者: Matt Comeaux 的来源 发布者: 2017 年 9 月 15 日

回应 1


1

15257 作者的声誉

决定

正如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“或”序列中的第一个“真实”变量,或者在所有变量均为“ falsey”时遇到的最后一个变量。

作者: גלעד ברקן 发布者: 2017 年 9 月 15 日
32x32