我的函数应该用输入字符串中的元音替换自己的大写版本(“a”变成“A”,“dog”变成“dOg”)
它需要一个字符串并创建一个数组来存储和返回更改的输出
function LetterChanges(str) {
var array=[];
var n =str.length;
for (var i =0;i<n;i++){
if (/[a-z]/i.test(str[i])){
if (array[i]==="a" || array[i]==="e" || array[i]==="i" || array[i]==="o"|| array[i]==="u")
{
array[i]=array[i].toUpperCase();
};
}
return array;
}
为什么我的array[i]=array[i].toUpperCase()
无法用它的大写值替换小写值?
当我打印我的数组时,它仍然具有小写值,尽管我将新大写的值分配给该索引?
答案 0 :(得分:2)
在替换函数中使用RegExp
怎么样?这非常非常容易!
然后,您可以使用函数来详细说明要替换的字符串,然后将其返回到replace
函数。在你的情况下,它只会返回元音的大写值。
以下是代码:
function LetterChanges(str) {
return str.replace(/[aeiou]/g, function(s) { return s.toUpperCase() });
}
示例:
LetterChanges("hello!");
> "hEllO!"
LetterChanges("aeiou");
> "AEIOU"
LetterChanges("dntrplc");
> "dntrplc"
答案 1 :(得分:0)
在JavaScript中,字符串是不可变的:
var s = "dog";
s[1] = 'O'; // Does nothing!
因此,您每次都必须创建一个新字符串。您可以创建一个方法来执行此操作:
String.prototype.replaceAt = function(index, character)
{
return this.substr(0, index) + character + this.substr(index+character.length);
};
以下是您将使用此功能的代码的工作副本(我修复了您的一些问题):
String.prototype.replaceAt = function(index, character)
{
return this.substr(0, index) + character + this.substr(index+character.length);
};
function LetterChanges(str) {
for (var i =0;i<str.length;i++)
{
if (/[a-z]/i.test(str[i])) //Note: This test is pretty useless
{
if (str[i]==="a" || str[i]==="e" || str[i]==="i" || str[i]==="o"|| str[i]==="u")
{
str = str.replaceAt(i, str[i].toUpperCase());
}
}
}
return str;
}
document.write(LetterChanges("dog")); // Print dOg
答案 2 :(得分:0)
我相信你需要初始化你的数组。就是这个
var array=[];
应该是
var array=str.split('');
答案 3 :(得分:0)
您的功能缺少右括号('}')。
您知道可以使用函数替换匹配的文本吗?
function uppercaseVowels(str){
return str.replace(/([aeiou])/g, function(a, b){
return b.toUpperCase();
});
}
var s ='快速的红狐狸跳过懒惰的棕色狗。';
uppercaseVowels(S)
/ *返回值:(String) 这个问题很快就会发生变化。 * /