为什么可以';t我只是使用Javascript中的赋值语句更新数组[I]

为什么可以';t我只是使用Javascript中的赋值语句更新数组[I],javascript,arrays,replace,indexing,variable-assignment,Javascript,Arrays,Replace,Indexing,Variable Assignment,我的函数应该用大写的元音替换输入字符串中的元音(“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"

我的函数应该用大写的元音替换输入字符串中的元音(“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;
}
function-LetterChanges(str){
var数组=[];
var n=str.length;

对于JavaScript中的(var i=0;i,字符串是不可变的:

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=函数(索引,字符)
{
返回this.substr(0,索引)+字符+this.substr(索引+字符.长度);
};
函数更改(str){

对于(var i=0;i我认为需要初始化数组

var array=[];
应该是

var array=str.split('');

您的函数缺少右括号('}')

您知道可以使用函数替换匹配的文本吗

function uppercaseVowels(str){
    return str.replace(/([aeiou])/g, function(a, b){
        return b.toUpperCase();
    });
}
var s='那只敏捷的红狐跳过了那只懒惰的棕色狗。'

大写元音

/*返回值:(字符串) 那只敏捷的红狐跳过了那只懒洋洋的棕色狗。
*/

在replace函数中使用
RegExp
怎么样?这非常简单

然后,您可以使用函数详细说明要替换的字符串,然后将其返回到
replace
函数。在您的情况下,它将只返回元音的大写值

代码如下:

function LetterChanges(str) { 
    return str.replace(/[aeiou]/g, function(s) { return s.toUpperCase() });
}
例如:

LetterChanges("hello!");
> "hEllO!"

LetterChanges("aeiou");
> "AEIOU"

LetterChanges("dntrplc");
> "dntrplc"

errrr,数组中没有任何内容?谢谢!这就是我要寻找的答案。我想知道为什么我不能使用简单赋值语句而不是replace方法。感谢您对字符串不可变的解释以及阅读我的完整问题!