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

PigLatin Issue with substr() and slice()

本文关键字:PigLatin 问题 substr slice      更新时间:2023-09-26

目标给定一个字符串,将该字符串翻译成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. 上述代码适用于"algorithm"answers"desk"等情况,但因"glove"而失败,这让我相信问题出在.substr((或.slice((周围。进一步调查认为这是一个逻辑错误。感谢您的帮助

问题是,在第一次迭代期间,代码总是从循环中返回。CCD_ 1永远不会大于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';
        }
    }
}

这个代码应该可以完成任务。

您返回的值没有测试字符是否为元音。

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