为什么我不能简单地使用 Javascript 中的赋值语句更新数组[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;
}

为什么我的array[i]=array[i].toUpperCase()不能用它的大写值替换小写值?

当我打印我的数组时,它仍然有小写的值,尽管我将新大写的值赋给该索引?

如何在替换函数内使用RegExp ?它非常非常简单!

您可以使用一个函数来详细描述要替换的字符串,然后将其返回给replace函数。在你的例子中,它将只返回元音的大写值。

代码如下:

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

的例子:

LetterChanges("hello!");
> "hEllO!"
LetterChanges("aeiou");
> "AEIOU"
LetterChanges("dntrplc");
> "dntrplc"

在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

我认为你需要初始化你的数组。也就是这个

var array=[];
应该

var array=str.split('');

你的函数缺少一个右括号('}')。

你知道你可以使用一个函数来替换匹配的文本吗?

function uppercaseVowels(str){
    return str.replace(/([aeiou])/g, function(a, b){
        return b.toUpperCase();
    });
}

var s='敏捷的红色狐狸跳过了懒惰的棕色狗';

uppercaseVowels (s)

/*返回值:(String)敏捷的红色狐狸跳过了懒惰的棕色狗。*/

最新更新