将每个单词的首字母大写,并将其余单词保留为小写

时间:2016-04-28 20:18:36

标签: javascript

我正在学习Javascript here。我现在的任务是取一个给定的字符串并将每个单词的开头大写,如果单词的其余部分已经是大写字母,则将其设置为小写。

到目前为止我所拥有的:

function titleCase(str){
    var arrayify = str.split('');
    arrayify.forEach(function(current, index){
        for (var x = 0; x < current; x++){
            var caps = current[x];
            return caps;
        } 
    });
}

我的测试字符串:

  • I'm a little tea pot

  • sHoRt AnD sToUt

  • HERE IS MY HANDLE HERE IS MY SPOUT

我尝试过的事情:

function titleCase(str){
   str.split(' ').map(s => chartAt(0).toUpperCase() + s.slice(1)).join(' '); 
}
function titleCase(str){
     return this.replace(/\w\S*/g, function(txt){return txt.chartAt(0).toUpperCase} + txt.substr(1).toLowerCase();});
};

每次我使用=>时,它都会告诉我需要esversion:6才能运行它。

我的问题是,我做错了什么,以及最常用的做法是什么?

图片证明我并不疯狂:

enter image description here

2 个答案:

答案 0 :(得分:1)

要详细说明现有解决方案的问题,它们几乎可以正常运行但存在以下问题:

function titleCase(str){
   // missing `s.`--------v    v---extra "t" 
   str.split(' ').map(s => chartAt(0).toUpperCase() + s.slice(1)).join(' '); 
//^---missing return statement |---missing toLowerCase() call---^
}
function titleCase(str) {
     // -----v--should be `str`
     return this.replace(/\w\S*/g, function(txt){
       // ------------v--extra "t" |----v--- extra "}"
       return txt.chartAt(0).toUpperCase} + txt.substr(1).toLowerCase();
       // ---missing `()` -------------^
     });
};

以下是修正版本:

function titleCase(str){
   return str.split(' ').map(s => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase()).join(' ');
}
function titleCase(str) {
     return str.replace(/\w\S*/g, function(txt){
       return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
     });
}

答案 1 :(得分:1)

您可以更改函数,而不是在forEach循环中返回,而是将结果附加到要在末尾返回的现有变量。

获取每个数组值开头的字符,将其更改为大写,然后将其添加到已转换为小写的值的其余部分。

示例

function titleCase(str){
    var arrayify = str.split(' ');
    var result = '';
    arrayify.forEach(function(item) {
        result += item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() + ' ';
    });
    return result.slice(0, -1); // remove last whitespace
}