我试图写一个函数,大写字符串中每个单词的第一个字母(将字符串转换为标题情况)。

例如,当输入是“我是一个小茶壶”时,我期望“我是一个小茶壶”是输出。然而,该函数返回“i'm a little tea pot”。

这是我的代码:

函数标题案例(str) { var splitStr = str.toLowerCase().split(“ ”); for (var i = 0; i < splitStr.length; i++) { if (splitStr.length[i] < splitStr.length) { splitStr[i].charAt(0).toUpperCase(); } str = splitStr.join(“ ”); } 返回 str; } console.log(titleCase(“I'm a Little Teapot”));


当前回答

您没有将更改再次分配给数组,因此您的所有努力都是徒劳的。试试这个:

函数titleCase(str) { var splitStr = str.toLowerCase()。分割(' '); For (var I = 0;i < splitStr.length;我+ +){ //你不需要检查i是否大于splitStr长度,就像你的for为你做的那样 //赋值给数组 splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1); } //直接返回连接的字符串 splitStr返回。加入(' '); } 文档。write(titleCase(“我是一个小茶壶”));

其他回答

在ECMAScript 6中,使用箭头函数的一行回答:

const captialize = words => words.split(' ').map( w =>  w.substring(0,1).toUpperCase()+ w.substring(1)).join(' ')
text-transform: capitalize;

CSS已经得到了它:)

有很多方法可以实现这一点,例如,你可以尝试遍历字符串,或使用JavaScript内置的split(), map()和join()

我更喜欢使用正则表达式与替换方法,这是可用的字符串

capitalize = (str) =>  {
  return str.replace(/\b[a-z]/g, (letter) => letter.toUpperCase(););
}

使用\b边界匹治程序和[a-z]字符类标识,并使用回调函数将其替换为字母的大写版本。 更高效的 因为它只在字符串中的字符上迭代一次,并且它使用正则表达式来标识要大写的字母,这通常比使用循环和字符串操作实现相同的逻辑更快。

function titleCase(str) {

    var myString = str.toLowerCase().split(' ');
    for (var i = 0; i < myString.length; i++) {
        var subString = myString[i].split('');
        for (var j = 0; j < subString.length; j++) {
            subString[0] = subString[0].toUpperCase();
        }
        myString[i] = subString.join('');
    }

    return myString.join(' ');
}

出于可读性考虑,我通常不喜欢使用regexp,而且我也尽量避免使用循环。我认为这是有可读性的。

function capitalizeFirstLetter(string) {
    return string && string.charAt(0).toUpperCase() + string.substring(1);
};