Lodash 标题大小写(每个单词的大写首字母)

我正在浏览 loash 文档和其他 Stack Overflow 问题——虽然有 是几种完成这项任务的原生 JavaScript 方法,但是有没有一种方法可以使用 纯粹的 loash 函数(或者至少是现有的原型函数)将字符串转换为 title case,这样我就不必使用正则表达式或者定义新函数了?

例如:。

This string ShouLD be ALL in title CASe

应该成为

This String Should Be All In Title Case
155935 次浏览
 var s = 'This string ShouLD be ALL in title CASe';
_.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

除非我错过了它,否则 loash 没有自己的小写/大写方法。

这里有一种方法,只使用 loash 方法,不使用内建方法:

_.reduce(_.map(_.split("Hello everyOne IN the WOrld", " "), _.capitalize), (a, b) => a + " " + b)

这可以通过对 startCase的一个小小的修改来实现:

_.startCase(_.toLower(str));

console.log(_.startCase(_.toLower("This string ShouLD be ALL in title CASe")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

'This string ShouLD be ALL in title CASe'
.split(' ')
.map(_.capitalize)
.join(' ');

虽然没有@4castle 的回答简洁,但是描述性很强,而且还很华而不实... ..。

var basicTitleCase = _
.chain('This string ShouLD be ALL in title CASe')
.toLower()
.words()
.map(_.capitalize)
.join(' ')
.value()


console.log('Result:', basicTitleCase)
console.log('Exact Match:' , basicTitleCase === 'This String Should Be All In Title Case')
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

_.startCase(_.camelCase(str))

对于非用户生成的文本,这将处理比接受的答案更多的情况

> startCase(camelCase('myString'))
'My String'
> startCase(camelCase('my_string'))
'My String'
> startCase(camelCase('MY_STRING'))
'My String'
> startCase(camelCase('my string'))
'My String'
> startCase(camelCase('My string'))
'My String'

与乐得版本4。

_.upperFirst(_.toLower(str))

下面是我的用例的另一个解决方案: “魔鬼的脊梁”

简单来说:

function titleCase (str) {
return _.map(str.split(' '), _.upperFirst).join(' ');
}

使用 startCase 可以删除撇号,所以我必须解决这个限制。其他的解决方案看起来很复杂。我喜欢这个,因为它干净,容易理解。

对于 lodash 4,可以使用 _. Capitalize ()

_.capitalize('JOHN') 它返回’约翰’

详情请参阅 https://lodash.com/docs/4.17.5#capitalize

这个问题的答案有好有坏。 有些人推荐使用 _.upperFirst,有些人推荐使用 _.startCase

知道他们之间的区别。

I) _.upperFirst将转换你的字符串的第一个字母,然后字符串可能是一个单词或多个单词,但你的字符串的唯一的第一个字母被转换为大写。

_.upperFirst('jon doe')

产出:

Jon doe

检查文档 https://lodash.com/docs/4.17.10#upperFirst

Ii) _.startCase将转换字符串中每个单词的第一个字母。

_.startCase('jon doe')

产出:

Jon Doe

Https://lodash.com/docs/4.17.10#startcase

下面的代码可以很好地工作:

var str = "TITLECASE";
_.startCase(str.toLowerCase());
const titleCase = str =>
str
.split(' ')
.map(str => {
const word = str.toLowerCase()
return word.charAt(0).toUpperCase() + word.slice(1)
})
.join(' ')

你也可以分割出映射函数来做单独的单词

这可以只使用 loash 来完成

properCase = string =>
words(string)
.map(capitalize)
.join(' ');


const proper = properCase('make this sentence propercase');


console.log(proper);
//would return 'Make This Sentence Propercase'

这是在我自己的用例中测试过的最干净和最灵活的实现 imo。

import { capitalize, map } from "lodash";


const titleCase = (str) => map(str.split(" "), capitalize).join(" ");


// titleCase("ALFRED NÚÑEZ") => "Alfred Núñez"
// titleCase("alfred núñez") => "Alfred Núñez"
// titleCase("AlFReD nÚñEZ") => "Alfred Núñez"
// titleCase("-") => "-"

来自 https://github.com/lodash/lodash/issues/3383#issuecomment-430586750

'JHON&JOHN C/O DR. BLah'.replace(/\w+/g, _.capitalize);

结果:

'Jhon&John C/O Dr. Blah'

你可以简单的使用大小写方法,它将字符串的第一个字符转换为大写,剩下的字符转换为小写。 Https://lodash.com/docs/#capitalize

const str = 'titlecase this string ';
_.capitalize(str); //Titlecase This String