substr() 和 slice() 的 PigLatin 问题
PigLatin Issue with substr() and slice()
OBJECTIVE
给定一个字符串,将字符串翻译成 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");
问题
- 上述代码适用于 "algorithm" 和 "desk" 等情况,但因 "glove" 而失败 - 让我相信问题出在 .substr() 或 .slice( ).进一步调查认为这是一个逻辑错误。感谢您的帮助!
问题是您的代码在第一次迭代期间总是 return 从循环开始。 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';
}
}
}
这段代码应该可以解决问题。
您返回的值没有测试字符是否为元音字母。
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
来测试字符是否为元音的。
OBJECTIVE 给定一个字符串,将字符串翻译成 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");
问题
- 上述代码适用于 "algorithm" 和 "desk" 等情况,但因 "glove" 而失败 - 让我相信问题出在 .substr() 或 .slice( ).进一步调查认为这是一个逻辑错误。感谢您的帮助!
问题是您的代码在第一次迭代期间总是 return 从循环开始。 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';
}
}
}
这段代码应该可以解决问题。
您返回的值没有测试字符是否为元音字母。
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
来测试字符是否为元音的。