为什么我不能在Javascript中使用赋值语句更新array [i]

时间:2014-08-06 02:29:11

标签: 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" || array[i]==="o"|| array[i]==="u")
{
 array[i]=array[i].toUpperCase();
};
}
return array;
}

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

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

4 个答案:

答案 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) 这个问题很快就会发生变化。 * /