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'

详情见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(' ')

也可以把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