Lodash标题案例(每个单词的大写第一个字母)

bra*_*ipt 80 javascript lodash

我正在查看lodash文档和其他Stack Overflow问题 - 虽然有几种本地JavaScript方法可以完成此任务,但是有一种方法可以使用纯粹的 lodash函数(或至少现有的原型函数)将字符串转换为标题案例这样我就不必使用正则表达式或定义新函数了?

例如

This string ShouLD be ALL in title CASe
Run Code Online (Sandbox Code Playgroud)

应该成为

This String Should Be All In Title Case
Run Code Online (Sandbox Code Playgroud)

4ca*_*tle 166

这可以通过以下小修改来完成startCase:

_.startCase(_.toLower(str));
Run Code Online (Sandbox Code Playgroud)

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

  • `_.startCase("aaa BBB ccc")==="Aaa BBB Ccc"` (3认同)
  • 它不适用于带重音的名字(西班牙语“Martínez Cortés Peña”变为“Martinez Cortes Pena”)或带有连字符(法语“Jean-Louis”变为“Jean Louis”)。lodash 的任何 "*Case" 函数也是如此 (3认同)
  • 我喜欢.我不知道`startCase`. (2认同)
  • _.startCase("camelString") === "Camel String" 但是 _.startCase(_.toLower("camelString")) === "Camelstring" 似乎 lodash 需要一个 titleCase 方法 (2认同)
  • 我喜欢这个,但是,它删除了诸如`:`之类的字符,这是一个问题。 (2认同)

ari*_*sfl 34

_.startCase(_.camelCase(str))
Run Code Online (Sandbox Code Playgroud)

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

> 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'
Run Code Online (Sandbox Code Playgroud)


Jam*_*yen 19

与lodash版本4.

_.upperFirst(_.toLower(str))

  • 它比startCase更好,因为它可以处理比az更多的字母,例如å,ä和ö。 (3认同)
  • upperFirst将仅更改第一个单词的第一个字符,而不更改后续单词。由于这个特殊原因,我不认为这比startCase更好。 (2认同)

CD.*_*D.. 14

'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');
Run Code Online (Sandbox Code Playgroud)

  • `_.startCase`删除标点符号.示例`_.startCase('first second etc ...`返回字符串`First Second Etc` (3认同)
  • 绝对是最简洁的,喜欢。显然仍然需要拆分成一个数组,但据我所知,这仍然是最短和最甜蜜的解决方案。此外,根据@AlexandreThebaldi 指出的问题 1528,可能应该使用 `upperFirst` 而不是 `capitalize`。 (2认同)

小智 7

在我看来,这是在我自己的用例上测试的最干净、最灵活的实现。

\n
import { capitalize, map } from "lodash";\n\nconst titleCase = (str) => map(str.split(" "), capitalize).join(" ");\n\n// titleCase("ALFRED N\xc3\x9a\xc3\x91EZ") => "Alfred N\xc3\xba\xc3\xb1ez"\n// titleCase("alfred n\xc3\xba\xc3\xb1ez") => "Alfred N\xc3\xba\xc3\xb1ez"\n// titleCase("AlFReD n\xc3\x9a\xc3\xb1EZ") => "Alfred N\xc3\xba\xc3\xb1ez"\n// titleCase("-") => "-"\n
Run Code Online (Sandbox Code Playgroud)\n


Vis*_*tty 5

这个问题有不同的答案。有些建议使用_.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


Tar*_*der 5

下面的代码将完美运行:

var str = "TITLECASE";
_.startCase(str.toLowerCase());
Run Code Online (Sandbox Code Playgroud)