为什么不't.toUpperCase()将str[i]大写
Why doesn't .toUpperCase() capitalize str[i]?
执行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()
部分,然后推荐另一个解决方案。
Javascript中的字符串是基元类型,而不是对象。
当您在基元类型(例如str[i] = 'a'
)中设置属性时,Javascript会为该值创建一个新的装箱对象,对其进行变异,然后将其丢弃。
有关更多详细信息,请参阅规范
相反,您应该将新字符串组装到一个可变数组中,然后调用.join('')
将其转换为字符串。
您可以创建另一个字符串来构建返回字符串,请参阅下面代码中的修复程序
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 ;
}
您可以通过replace
和大写函数将元音大写:
newstr = newstr.replace(
/[aeiou]/g, // replace all vowels
function(letter) { // called for each match
return letter.toUpperCase();
}
);
示例:http://codepen.io/paulroub/pen/tvhcF
字符串的内容不能更改,即它们是不可变的。创建一个新字符串,而不是尝试在位编辑。
您可以使用以下代码让您的生活变得轻松
function LetterChanges(str) {
return str.replace(/[a-zA-Z]/g,function(x) {
return String.fromCharCode(x.charCodeAt(0)+1); }).replace(/[aeiou]/g,function(y) {
return y.toUpperCase();
});
}
相关文章:
- str.split(someString).join(someOtherString)是否等效于替换
- php布尔值's小写AND大写和数字布尔值'可以接受
- 正好包含2个大写字母和3个数字的正则表达式
- 使用filter和map方法将数组中某些元素的第一个字母大写-JavaScript
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 对象中的str.replacement()
- 创建时选择Nav大写字母
- 在JavaScript中将字符串中的第一个字母更改为大写
- 如何使用 num.toString 和 str.split 查找整数的最后一位数字
- 将第一个字母大写并去掉html代码
- JavaScript-querySelectorAll和小写/大写
- javascript将html实体条目发布后的下一个字母大写
- 带有大写字母的棱角分明的光滑属性
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 有没有一个函数会忽略javascript中的大写字母
- 大写--文本区域中的文本选择
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 字符串作为参数值放置时不会转换为大写
- 需要一些str.indexOf帮助javascript
- 为什么不't.toUpperCase()将str[i]大写