进行CoderByte挑战:
使用JavaScript语言,具有LetterChanges(str)函数 获取传递的str参数并使用以下命令修改它 算法。用字母替换字符串中的每个字母 在字母表中跟随它(即,c变为d,z变为a)。然后 将这个新字符串(a,e,i,o,u)中的每个元音大写,最后 返回此修改后的字符串。
我的解决方案:
function LetterChanges(str) {
var alphabet = "abcdefghijklmnopqrstuvwxyza",
vowels = "aiueo",
newstr = '';
for (var i = 0; i < str.length; i++) {
if (alphabet.indexOf(str[i]) != -1) {
newstr += alphabet[alphabet.indexOf(str[i]) + 1];
} else {
newstr += str[i];
}
}
for (var i = 0; i < vowels.length; i++) {
for (var j = 0; j < newstr.length; j++) {
//toUppercase the vowel in the newstring once found
if (newstr[j] == vowels[i]) {
newstr[j] = newstr[j].toUpperCase();
}
}
}
return newstr;
}
show(LetterChanges("fun times"));
show(LetterChanges("hello*3"));
toUpperCase()
没有把我想要的元音大写。但这似乎是正确的。我甚至试过这样的事情:
if (newstr[j] == vowels[i]) {
var toCap = newstr[j].toString();
newstr[j] = toCap.toUpperCase();
}
如果您考虑使用更好的解决方案,请回答toUpperCase()
部分,然后再推荐其他解决方案。
答案 0 :(得分:2)
Javascript中的字符串是原始类型,而不是对象。
当您在基本类型中设置属性(例如,str[i] = 'a'
)时,Javascript会为该值创建一个新的盒装对象,对其进行变异,然后将其抛弃。
有关详细信息,请参阅spec。
相反,您应该在可变数组中组合新字符串,然后调用.join('')
将其转换为字符串。
答案 1 :(得分:2)
您可以创建另一个字符串来构建返回字符串,请参阅下面的代码中的修复
function LetterChanges(str) {
var alphabet = "abcdefghijklmnopqrstuvwxyza",
vowels = "aiueo",
newstr = '',
returnStr = ''; //added to next step
for (var i = 0; i < str.length; i++) {
if (alphabet.indexOf(str[i]) != -1) {
newstr += alphabet[alphabet.indexOf(str[i]) + 1];
} else {
newstr += str[i];
}
}
for (var i = 0; i < vowels.length; i++) {
for (var j = 0; j < newstr.length; j++) {
//toUppercase the vowel in the newstring once found
if (newstr[j] == vowels[i]) {
returnStr += newstr[j].toUpperCase();
}else{
returnStr += newstr[j];
}
}
}
return returnStr ;
}
答案 2 :(得分:1)
您可以通过replace
和大写字母功能来大写元音:
newstr = newstr.replace(
/[aeiou]/g, // replace all vowels
function(letter) { // called for each match
return letter.toUpperCase();
}
);
答案 3 :(得分:0)
字符串的内容无法更改,I.E。他们是不变的。创建一个新字符串,而不是尝试就地编辑它。