【问题标题】:PigLatin Issue with substr() and slice()使用 substr() 和 slice() 的 PigLatin 问题
【发布时间】:2015-10-01 01:10:22
【问题描述】:

目标 给定一个字符串,将字符串翻译成 PigLatin(如果字符串以元音开头,将“way”附加到字符串的末尾 - 否则查找第一个元音并将所有前面的字母放在 str 的末尾,添加“ay” )。

代码

function translate(str) {

    //list vowels
    var vowel = ['a', 'e', 'i', 'o', 'u'];

    //if first letter = vowel, add 'way' to end of sentence
    // else return all letters before first vowel and append to end (with 'ay')
    for (var i = 0; i < str.length; i++) {
        if (vowel.indexOf(str[0]) > -1) {
            return str + 'way';
        } else {
          return str.substr(i+1) + str.slice(0,i+1) + 'ay';
        }
    }
}




translate("dresser");

问题

  1. 上述代码适用于“算法”和“桌面”等情况,但因“手套”而失败 - 让我相信问题出在 .substr() 或 .slice() 上。进一步调查认为这是一个逻辑错误。任何帮助表示赞赏!

【问题讨论】:

    标签: javascript slice substr


    【解决方案1】:

    问题是您的代码在第一次迭代期间总是会从循环中返回。 i 永远不会大于 0。

    您应该做的(对于初学者)是从循环内部删除检查。像这样:

    function translate(str) {
    
        //list vowels
        var vowel = ['a', 'e', 'i', 'o', 'u'];
        //if first letter = vowel, add 'way' to end of sentence
        if (vowel.indexOf(str[0]) > -1) {
            return str + 'way';
        }
    
        // else return all letters before first vowel and append to end (with 'ay')
        for (var i = 0; i < str.length; i++) {
            if (vowel.indexOf(str[i]) > -1) {
                return str.substr(i) + str.slice(0,i) + 'ay';
            }
        }
    }
    

    这段代码应该可以解决问题。

    【讨论】:

    • hmmmm...你能详细说明一下吗?当 vowel.indexOf(str[i]) > -1 时是否需要使用“break”语句?
    • @kidlogic 不,没有中断声明。您过早地无条件地从循环中返回。我用有效的代码更新了我的答案。我取出了i+1's 并用i's 替换它们。
    • 您为此感到很傻,因为我最近有非常相似的代码,但后来认为我的 vowel.indexOf(str[i]) >-1 谢谢!
    • @kidlogic ymway easureplay
    【解决方案2】:

    如果字符是元音,您将返回一个值而不测试该字符。

    function translate(str) {
    
        //list vowels
        var vowel = ['a', 'e', 'i', 'o', 'u'];
    
        //if first letter = vowel, add 'way' to end of sentence
        // else return all letters before first vowel and append to end (with 'ay')
        for (var i = 0; i < str.length; i++) {
            if (vowel.indexOf(str[0]) > -1) {
                return str + 'way';
            } else if(vowel.indexOf(str[i]) !== -1) {
              return str.substr(i) + str.slice(0,i) + 'ay';
            }
        }
    }
    

    注意我是如何添加if 来测试字符是否为元音的。

    jsfiddle

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2015-02-16
      • 2019-12-14
      • 2014-02-14
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2014-09-03
      • 2013-02-01
      相关资源
      最近更新 更多