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

Lodash title case (uppercase first letter of every word)

本文关键字:单词 大小写 标题 Lodash      更新时间:2023-09-26

我正在浏览 lodash 文档和其他 Stack Overflow 问题 - 虽然有几种原生 JavaScript 方法可以完成此任务,但有没有办法使用 lodash 函数(或至少现有的原型函数(将字符串转换为标题大小写,这样我就不必使用正则表达式或定义新函数?

例如

This string ShouLD be ALL in title CASe

应该成为

This String Should Be All In Title Case

这可以通过对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>

_.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))

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

这个问题的答案好坏参半。有些人建议使用_.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

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

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 方法而不使用内置方法的方法:

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

下面的代码将完美运行:

var str = "TITLECASE";
_.startCase(str.toLowerCase());

这只能用 lodash 来完成

properCase = string =>
        words(string)
            .map(capitalize)
            .join(' ');
const proper = properCase('make this sentence propercase');
console.log(proper);
//would return 'Make This Sentence Propercase'
 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

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

const titleCase = str =>
  str
    .split(' ')
    .map(str => {
      const word = str.toLowerCase()
      return word.charAt(0).toUpperCase() + word.slice(1)
    })
    .join(' ')

您还可以拆分出地图功能来做单独的单词

不像@4castle的回答那么简洁,但描述性和充满lodash,尽管如此......

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>

这是我用例的另一种解决方案:《魔鬼的脊梁》

只是:

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

使用 startCase 会删除撇号,所以我必须解决这个限制。其他解决方案似乎非常复杂。我喜欢这个,因为它干净,易于理解。

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

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

使用 lodash 4,您可以使用 _.capitalize((

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

有关详细信息,请参阅 https://lodash.com/docs/4.17.5#capitalize