是否有一个简单的方法来转换字符串标题大小写?例如,约翰·史密斯变成了约翰·史密斯。我不是在寻找像John Resig的解决方案那样复杂的东西,只是(希望)一些一两行代码。


当前回答

这是我的版本,在我看来很容易理解,也很优雅。

Const STR = "foo bar baz"; const newStr = str.split(' ') .map(w => w[0].toUpperCase() + w.substring(1).toLowerCase()) . join (' '); console.log (newStr);

其他回答

https://lodash.com/docs/4.17.11#capitalize

使用Lodash库!!更可靠的

_.capitalize('FRED'); => 'Fred'

健壮的函数式编程方式做标题大小写函数

Exaplin版本

function toTitleCase(input){
    let output = input
        .split(' ')  // 'HOw aRe YOU' => ['HOw' 'aRe' 'YOU']
        .map((letter) => {
            let firstLetter = letter[0].toUpperCase() // H , a , Y  => H , A , Y
            let restLetters = letter.substring(1).toLowerCase() // Ow, Re, OU => ow, re, ou
            return firstLetter + restLetters // conbine together
        })
        .join(' ') //['How' 'Are' 'You'] => 'How Are You'
    return output
}

实现版本

function toTitleCase(input){
    return input
            .split(' ')
            .map(i => i[0].toUpperCase() + i.substring(1).toLowerCase())
            .join(' ') 
}

toTitleCase('HoW ARe yoU') // reuturn 'How Are You'
"john f. kennedy".replace(/\b\S/g, t => t.toUpperCase())

将单个单词转换为标题大小写的简单方法

使用“切片”方法和字符串拼接

str.slice(0, 1).toUpperCase() + str.slice(1, str.length)

*如果你想要小写单词的其余部分,在结尾添加.toLowerCase()

使用ES6扩展操作符、映射和Join

[...str].map((w, i) => i === 0 ? w[0].toUpperCase() : w).join('')

我的一句话解决方案:

String.prototype.capitalizeWords = function() {
    return this.split(" ").map(function(ele){ return ele[0].toUpperCase() + ele.slice(1).toLowerCase();}).join(" ");
};

然后,可以在任何字符串上调用方法capitalizeWords()。例如:

var myS = "this actually works!";
myS.capitalizeWords();

>>> This Actually Works

我的另一个解决方案:

function capitalizeFirstLetter(word) {
    return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
String.prototype.capitalizeAllWords = function() {
    var arr = this.split(" ");
    for(var i = 0; i < arr.length; i++) {
        arr[i] = capitalizeFirstLetter(arr[i]);
    }
    return arr.join(" ");
};

然后,可以在任何字符串上调用方法capitalizeWords()。例如:

var myStr = "this one works too!";
myStr.capitalizeWords();

>>> This One Works Too

基于Greg Dean回答的替代解决方案:

function capitalizeFirstLetter(word) {
    return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
String.prototype.capitalizeWords = function() {
    return this.replace(/\w\S*/g, capitalizeFirstLetter);
};

然后,可以在任何字符串上调用方法capitalizeWords()。例如:

var myString = "yes and no";
myString.capitalizeWords()

>>> Yes And No