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

标签 javascript algorithm

所以我写了一个算法,将一个词转换成 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 if”语句在它应该触发“else”语句时触发。我认为这是因为当单词的第一个和第二个字母不是元音,而单词“eight”的前两个字母是元音时,就会触发“else if”语句。我不是在寻找解决方案,因为我想自己解决这个问题。我希望有人能向我解释为什么“八”会触发“else if”语句而不是“else”语句。为澄清起见,“八”应作为“八路”返回(即“其他”语句)。我希望这是有道理的。如果不是,请随时要求澄清。感谢您的帮助!

最佳答案

正如 John Hascall 和 dandavis 评论的那样,condition 可能无法按您预期的方式工作。

这个语句,splitStr[0] !== condition,是一个非常有想象力的语法(这很有道理,让我想找到一种方法来支持/破解它:)。

在 JS 中,您会发现类似 vowels.includes(splitStr[0])!vowels.includes(splitStr[0]) 的性能可能更好您努力进行的比较。

语句,条件 = vowels[0] ||元音[1] ||元音[2] ||元音[3] || vowels[4],简单地分配变量,condition,“or”序列中的第一个“truthy”变量,或者它遇到的最后一个变量,如果都是“falsey”。

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

相关文章:

字符串匹配的扩展版本算法

c++ - 矩阵中字符的随机移动

javascript - 捕获按钮上所有单击的跨浏览器方式是什么?

javascript - Ajax数据库选择值返回 '0'而不是字符串

javascript - jQuery:当窗口宽度匹配数组中的任何值时触发函数

algorithm - 无死锁与无饥饿

javascript - 如何在 LINQPad 中的代码中单击按钮(而不是通过鼠标)?

javascript - 如何在 HighChart 中设置每月的 PointIntervals

algorithm - DAG图和拓扑排序基本原理上的困惑

algorithm - 评估网格中单词的分布