我在 Coderbyte 的挑战中遇到问题
使用 JavaScript 语言,让函数 LetterChanges(str) 获取正在传递的 str 参数,并使用以下算法对其进行修改。将字符串中的每个字母替换为字母表中紧随其后的字母(即,c 变为 d,z 变为 a)。然后将这个新字符串中的每个元音(a、e、i、o、u)大写,最后返回这个修改后的字符串。
这是我的代码:
function LetterChanges(str) {
str = str.toLowerCase();
var al = "abcdefghijklmnopqrstuvwxyz";
var vo = "aeiou";
var newStr = "";
for (var i = 0;i < str.length;i++) {
if (al.charAt(al.indexOf(str.charAt(i))) == "z") {
newStr += "A";
}
else if (str.charAt(i) == " "){
newStr += " ";
}
else {
if (al.charAt(al.indexOf(str.charAt(i))+1) == vo.charAt(vo.indexOf(str.charAt(i)))) {
newStr += vo.charAt(vo.indexOf(str.charAt(i))+1).toUpperCase();
}
else {
newStr += al.charAt(al.indexOf(str.charAt(i))+1)
}
}
}
console.log(newStr);
}
LetterChanges("Argument goes here")
这会将以下内容返回到控制台:
bshvnfou hpft ifsf
但是我需要返回的是:
bshvnfOU hpft Ifsf
我不明白为什么我的 .toUpperCase()
不起作用。非常感谢您提供的任何帮助!
最佳答案
您的问题不是 toUpperCase()
不起作用,而是您的代码永远无法达到这一点。
你的
if (al.charAt(al.indexOf(str.charAt(i))+1) == vo.charAt(vo.indexOf(str.charAt(i))))
永远不会通过,因为+1
。那里没有必要,如果删除它,就会出现大写元音。除此之外,您的代码还存在其他问题,但我会让您解决这些问题,作为挑战的一部分:-)
关于javascript - Coderbyte 挑战 4 : Letter Changes - Won't Upper Case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848785/