带有substr()和slice()的PigLatin问题

时间:2015-07-12 20:05:52

标签: javascript slice substr

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

CODE

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()。其他调查认为这是一个逻辑错误。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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';
        }
    }
}

这段代码可以解决问题。

答案 1 :(得分:0)

如果字符是元音,则返回值而不进行测试。

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