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


108

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

例如

This string ShouLD be ALL in title CASe

应该成为

This String Should Be All In Title Case


3
您也可以从HTML做同样的事情,style =“ text-transform:capitalize”
Chaudhary

Answers:


213

只需对以下内容进行少量修改即可完成此操作startCase

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


3
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
布兰登

2
我喜欢。我不知道startCase
布兰登

1
.startCase(“ camelString”)===“ Camel String”,但_.startCase( .toLower(“ camelString”)))=== lodash似乎需要使用titleCase方法
aristidesfl 2016年

4
我喜欢这个,但是它删除了诸如之类的字符:,这是一个问题。
JabberwockyDecompiler

1
带有重音的名字(西班牙的“MartínezCortésPeña”变成“ Martinez Cortes Pena”)或连字符(法语的“ Jean-Louis”变成“ Jean Louis”)不起作用。这同样适用于lodash的任何“*案例”功能
弗洛

42
_.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'

27

使用lodash版本4。

_.upperFirst(_.toLower(str))


3
这样做比startCase它更好,因为它可以处理比z更多的字母,例如å,ä和ö。
拉尔斯·尼斯特罗姆(LarsNyström)

3
upperFirst将仅更改第一个单词的第一个字符,而不更改后续单词。由于这个特殊原因,我不认为这比startCase更好。
Raghavan

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

1
绝对是最简洁的,喜欢它。显然仍然需要拆分为一个数组,但这仍然是我所知道的最短,最甜蜜的解决方案。此外,根据@AlexandreThebaldi指出的问题1528,可能应使用upperFirst代替capitalize
brandonscript

...但是_.startCase绝对赢了:)
brandonscript

5
_.startCase删除标点符号。示例_.startCase('first second etc...返回字符串First Second Etc
LuckyStarr

这是对我的使用情况下,更好地startCase皈依一切例如空白user_nameUser Name,我只希望User_nametext-transform: capitalizeCSS财产
gonzarodriguezt

7

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


是的,但是混合大小写的字符串呢?如果没有,这些都不会将'jOn DoE'变成'Jon Doe' _.lower()
brandonscript

3

这是仅使用lodash方法而不使用内置方法的方法:

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

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

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


0
 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

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


@vbotio看起来_.upperFirst仅适用于第一个字符(_.capitalize()?的同义词)
brandonscript

1
capitalizeupperFirst做不同的事情。
布兰登

_.capitalize适用于整个字符串
vbotio

0

虽然不像@ 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>


我猜答案的冗长和冗长几乎使它不受欢迎。我没有投票,但这不是我的首选。
brandonscript

0

这是我的用例的另一个解决方案:“魔鬼的骨干”

只是:

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

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


0

这只能用lodash来完成

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

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

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

您需要要求大写和来自lodash的单词。
贾斯汀·布朗


是的,但是您不是从lodash调用函数;除非您以某种方式混淆了它们var words = ._words
brandonscript


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.