Javascript错误返回提供的字符串,每个单词的首字母大写

时间:2015-02-22 04:16:12

标签: javascript string

我正在努力解决一个基本的编码挑战,我觉得我的代码应该工作。但是这一行没有正确地重新分配“str[i][0] = str[i].charAt(0).toUpperCase();

我只是不知道为什么这样在Javascript中这样工作,我想我已经在Ruby中解决了同样的问题而没有问题。任何有关如何在Javascript中了解其工作原理的提示或链接将非常感谢!

这是挑战:

返回提供的字符串,每个单词的首字母大写。

function titleCase(str) {
    str = str.toLowerCase();
    str = str.split(" ");
    for (var i = 0; i < str.length; i++) {
        str[i][0] = str[i].charAt(0).toUpperCase();
    }
    str = str.join(" ");
    return str;
}
console.log(titleCase("I'm a little tea pot"));

1 个答案:

答案 0 :(得分:3)

在JavaScript中,字符串是不可变对象。因此,一旦创建了String对象,就无法更改其中的单个字符,但您需要创建一个新的String对象。所以,你最好用这样的东西

function titleCase(str) {
    str = str.toLowerCase().split(" ");
    for (var i = 0; i < str.length; i++) {
        str[i] = str[i].charAt(0).toUpperCase() + str[i].substring(1);
    }
    return str.join(" ");
}
console.log(titleCase("I'm a little tea pot"));
# I'm A Little Tea Pot

这里的关键是,

str[i] = str[i].charAt(0).toUpperCase() + str[i].substring(1);

我们将每个单词的第一个字符转换为大写,然后将其与实际字符串的其余部分连接,并将新创建的String对象存储回str数组。


除此之外,如果您更喜欢功能性触摸来解决此问题,您可以

function titleCase(str) {
    return str.toLowerCase().split(" ").map(function(currentPart) {
        return currentPart.charAt(0).toUpperCase() + currentPart.substring(1);
    }).join(" ");
}

map函数将调用传递给它的函数,每个元素来自split数组并返回另一个数组。最后,我们将所有元素与join一起加入。