【问题标题】:JavaScript Pig Latin Converter OptimizationsJavaScript Pig Latin 转换器优化
【发布时间】:2021-12-13 19:46:27
【问题描述】:

Total newb here...寻找一些优化此 pigLatin 转换器的示例。

function pigLatin(str) {

  var vowels = ["A", "E", "I", "O", "U", "a", "e", "i", "o", "u"];
   if (vowels.includes(str[0])) {
    str = str + "way";
    return str;
  }
 
  for (i = 0; i < str.length; i++) {
    if (vowels.includes(str[i])) {
      var flopStr = str.substring(0, [i]) + "ay";
      var newStr = str.substring([i]) + flopStr;
      return newStr;
    }
  }
  
  if (!vowels.includes(str) === true) {
    str = str + "ay";
    return str;
  }
}

我很高兴我至少可以写一些有用的东西。我愿意;但是,需要一些关于完成相同任务的其他方法的指导。

【问题讨论】:

  • 你想做什么?预期的输出是什么?
  • 嗨,欢迎来到 SO!这个问题目前的写作方式,缺乏细节和清晰度。你想达到什么目的?如果您正在寻找优化 - 您究竟想优化什么?互联网上有很多类似算法正在实施的示例,甚至在 SO 上 - 你研究过这些吗?
  • 我正在寻找其他一些方法来做到这一点。我认为循环使用的太多了,我打赌可能会有更有效的方法。
  • 预期输出是: - 如果单词以辅音开头,则取第一个辅音或辅音簇,将其移动到单词的末尾,然后添加“ay”。如果单词以元音开头,只需在末尾添加“way”即可。将提供的字符串翻译成 Pig Latin。输入字符串保证为全小写英文单词。
  • 将数组字面量作为参数传递给substring 肯定不是您应该做的:这些字面值会被转换为数字,幸运的是会产生预期的值。

标签: javascript algorithm optimization


【解决方案1】:

这是一个没有任何循环的解决方案,使用正则表达式和第一个元音的索引

function pigLatin(str) {

  let lC = str.toLowerCase()
  
  const vowels = ["a", "e", "i", "o", "u"];
  
  let regex = /[aeiou]/
  
  let fVI = lC.search(regex) // firstVowelIndex
  
  switch(fVI) {
    case 0: 
      return lC+'way';
    default:
      return lC.substring(fVI) + lC.substring(0,fVI) + 'ay'
  }
}

console.log(pigLatin('coding'))  // 'odingcay'

console.log(pigLatin('addict'))  // addictway

(您可以在您的版本中采用的改进是将字符串转换为小写并从数组中删除大写元音)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多