Lodash 标题大小写(每个单词的首字母大写)
Lodash title case (uppercase first letter of every word)
我正在查看 lodash 文档和其他 Stack Overflow 问题 - 虽然有 are several native JavaScript ways of accomplishing this task,但有没有一种方法可以使用 purely[=20= 将字符串转换为标题大小写] lodash 函数(或至少现有的原型函数),以便我不必使用正则表达式或定义新函数?
例如
This string ShouLD be ALL in title CASe
应该变成
This String Should Be All In Title Case
var s = 'This string ShouLD be ALL in title CASe';
_.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')
除非我错过了,否则 lodash 没有自己的 lower/upper case 方法。
这是一种只使用 lodash 方法而不使用内置方法的方法:
_.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 的回答那么简洁,但是描述性强且 lodash-full,不过...
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'
使用 lodash 版本 4。
_.upperFirst(_.toLower(str))
这是我的用例的另一个解决方案:
"devil's backbone"
简单:
function titleCase (str) {
return _.map(str.split(' '), _.upperFirst).join(' ');
}
使用 startCase 会删除撇号,所以我不得不解决这个限制。其他解决方案似乎相当复杂。我喜欢它,因为它干净、易于理解。
对于 lodash 4,你可以使用 _.capitalize()
_.capitalize('JOHN')
它returns'John'
这个问题的答案不一。
有些人建议使用 _.upperFirst
,而有些人建议使用 _.startCase
.
了解它们之间的区别。
i) _.upperFirst
将转换字符串的第一个字母,然后字符串可能是单个单词或多个单词,但字符串的唯一第一个字母被转换为大写。
_.upperFirst('jon doe')
输出:
Jon doe
查看文档https://lodash.com/docs/4.17.10#upperFirst
ii) _.startCase
将转换字符串中每个单词的首字母。
_.startCase('jon doe')
输出:
Jon Doe
以下代码将完美运行:
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(' ')
也可以把map函数拆分出来做分词
这可以只用 lodash 来完成
properCase = string =>
words(string)
.map(capitalize)
.join(' ');
const proper = properCase('make this sentence propercase');
console.log(proper);
//would return 'Make This Sentence Propercase'
在我自己的用例中,这是最干净、最灵活的实现。
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'
你可以简单地使用lodash capitalize 方法,它将字符串的第一个字符转换为大写,其余字符转换为小写。
https://lodash.com/docs/#capitalize
const str = 'titlecase this string ';
_.capitalize(str); //Titlecase This String
我正在查看 lodash 文档和其他 Stack Overflow 问题 - 虽然有 are several native JavaScript ways of accomplishing this task,但有没有一种方法可以使用 purely[=20= 将字符串转换为标题大小写] lodash 函数(或至少现有的原型函数),以便我不必使用正则表达式或定义新函数?
例如
This string ShouLD be ALL in title CASe
应该变成
This String Should Be All In Title Case
var s = 'This string ShouLD be ALL in title CASe';
_.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')
除非我错过了,否则 lodash 没有自己的 lower/upper case 方法。
这是一种只使用 lodash 方法而不使用内置方法的方法:
_.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 的回答那么简洁,但是描述性强且 lodash-full,不过...
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'
使用 lodash 版本 4。
_.upperFirst(_.toLower(str))
这是我的用例的另一个解决方案: "devil's backbone"
简单:
function titleCase (str) {
return _.map(str.split(' '), _.upperFirst).join(' ');
}
使用 startCase 会删除撇号,所以我不得不解决这个限制。其他解决方案似乎相当复杂。我喜欢它,因为它干净、易于理解。
对于 lodash 4,你可以使用 _.capitalize()
_.capitalize('JOHN')
它returns'John'
这个问题的答案不一。
有些人建议使用 _.upperFirst
,而有些人建议使用 _.startCase
.
了解它们之间的区别。
i) _.upperFirst
将转换字符串的第一个字母,然后字符串可能是单个单词或多个单词,但字符串的唯一第一个字母被转换为大写。
_.upperFirst('jon doe')
输出:
Jon doe
查看文档https://lodash.com/docs/4.17.10#upperFirst
ii) _.startCase
将转换字符串中每个单词的首字母。
_.startCase('jon doe')
输出:
Jon Doe
以下代码将完美运行:
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(' ')
也可以把map函数拆分出来做分词
这可以只用 lodash 来完成
properCase = string =>
words(string)
.map(capitalize)
.join(' ');
const proper = properCase('make this sentence propercase');
console.log(proper);
//would return 'Make This Sentence Propercase'
在我自己的用例中,这是最干净、最灵活的实现。
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'
你可以简单地使用lodash capitalize 方法,它将字符串的第一个字符转换为大写,其余字符转换为小写。 https://lodash.com/docs/#capitalize
const str = 'titlecase this string ';
_.capitalize(str); //Titlecase This String