返回每个单词的第一个字母大写的字符串时出现Javascript错误

Javascript error with Returning the provided string with the first letter of each word capitalized

本文关键字:字符串 错误 Javascript 单词 第一个 返回      更新时间:2024-02-25

我正在解决一个基本的编码挑战,我觉得我的代码应该可以工作。但该行未正确重新分配"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"));

在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将所有元素连接在一起。