处理CoderByte问题并且第一个for循环不会在第一个或最后一个循环上执行。该功能是将每个字母转换为字母后面的下一个字母,然后将所有元音切换为大写。例如输入" coderbyte"正在回归" fpdfsczUE"什么时候应该是" dpdfsczUf"。所有变量和测试似乎都在起作用(见注释)。任何帮助将不胜感激 - 他们给出答案,但不解释为什么这不会起作用。
function LetterChanges(str) {
// convert every letter in a string to the letter after in the alphabet,
// then convert all vowels to uppercase, and return the string.
var alpha = "abcdefghijklmnopqrstuvwxyz";
var vowels = "aeiou";
for (var i=0; i<str.length; i++) {
// return (alpha.indexOf(str[i]) !== -1); checks true on first loop
if (alpha.indexOf(str[i]) !== -1) {
//return alpha[alpha.indexOf(str[i]) + 1]; // returns d correctly
// return alpha.indexOf(str[i]) + 1; // returns 3 correctly
//return str[i]; returns "c" correctly
// return str.replace(str[i], "X"); returns Xoderbyte correctly
// return str.replace(str[i+1], alpha[alpha.indexOf(str[i]) + 1]);
//returns cdderbyte correctly
// BUG: why isn't the line below working on the first and last
// loop ?
// ie. input "coderbyte" returns "fpdfsczUE"
str = str.replace(str[i], alpha[alpha.indexOf(str[i]) + 1]);
}
}
//return alpha[alpha.indexOf(str[i])];
for (var j=0; j<str.length; j++) {
if (vowels.indexOf(str[j]) !== -1) {
str = str.replace(str[j], str[j].toUpperCase());
}
}
return str;
}
答案 0 :(得分:0)
您的问题输出不正确 &#34; coderbyte&#34;需要改为&#34; dpEfsczUf&#34;不是&#34; dp d fsczUf&#34;。
我们需要替换特定索引处的字符,因为str.replace
将仅替换第一次出现。
replaceAt功能可以提供帮助
下面修改后的代码可以正常工作
String.prototype.replaceAt=function(index, character) {
return this.substr(0, index) + character + this.substr(index+character.length);
}
function LetterChanges(str) {
// convert every letter in a string to the letter after in the alphabet,
// then convert all vowels to uppercase, and return the string.
var alpha = "abcdefghijklmnopqrstuvwxyz";
var vowels = "aeiou";
for (var i=0; i<str.length; i++) {
if (alpha.indexOf(str[i]) !== -1) {
str = str.replaceAt(i, alpha[alpha.indexOf(str[i]) + 1]);
}
}
for (var j=0; j<str.length; j++) {
if (vowels.indexOf(str[j]) !== -1) {
str = str.replaceAt(j, str[j].toUpperCase());
}
}
return str;
}
答案 1 :(得分:0)
你误解了.replace()是如何工作的。 (参见Satyajit对你的问题的评论)这就是为什么你的功能的第二部分完美无缺;一旦元音被转换为大写,它就不能成为另一个角色转换的基础。
关于第一个循环:如果第一个循环后的传递中的字母与最接近i = 0的字母匹配,那么该字母将被替换,而不是您想要的那个。
如果您使用调试器,或者在第一次循环分配后添加console.log(str)
,那么将会发生什么事情。