Lodash titre cas (majuscule première lettre de chaque mot)

je regarde à travers les docs lodash et d'autres questions sur le débordement de la pile - alors qu'il y a plusieurs façons JavaScript natives d'accomplir cette tâche , y a-t-il un moyen pour que je puisse convertir une chaîne de caractères en cas de titre en utilisant purement fonctions lodash (ou au moins les fonctions prototypiques existantes) de sorte que je n'ai pas à utiliser une expression régulière ou définir une nouvelle fonction?

p.ex.

This string ShouLD be ALL in title CASe

devrait devenir

This String Should Be All In Title Case
31
demandé sur Community 2016-06-28 22:08:48

10 réponses

cela peut être fait avec une petite modification de 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>
84
répondu 4castle 2016-06-28 19:37:30
_.startCase(_.camelCase(str))

pour le texte non généré par l'utilisateur, cela permet de traiter plus de cas que la réponse acceptée

> 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'
19
répondu aristidesfl 2016-09-15 11:44:14

avec lodash la version 4.

_.upperFirst(_.toLower(str))

12
répondu James Nguyen 2017-07-17 03:01:09
'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');
9
répondu CD.. 2016-06-28 19:16:09

Voici une façon d'utiliser seulement les méthodes lodash et pas de méthodes builtin:

_.reduce(_.map(_.split("Hello everyOne IN the WOrld", " "), _.capitalize), (a, b) => a + " " + b)
3
répondu Brandon 2016-06-28 19:13:57

il y a des réponses mitigées à cette question. Certains recommandent d'utiliser _.upperFirst tandis que d'autres recommandent _.startCase .

connaissent la différence entre eux.

i) _.upperFirst transformera la première lettre de votre chaîne, alors la chaîne pourrait être d'un seul mot ou plusieurs mots, mais la seule première lettre de votre chaîne est transformée en majuscule.

_.upperFirst('jon doe')

sortie:

Jon doe

vérifier la documentation https://lodash.com/docs/4.17.10#upperFirst

ii) _.startCase transformera la première lettre de chaque mot à l'intérieur de votre chaîne.

_.startCase('jon doe')

sortie:

Jon Doe

https://lodash.com/docs/4.17.10#startCase

1
répondu Vishal Shetty 2018-06-27 06:11:34
 var s = 'This string ShouLD be ALL in title CASe';
 _.map(s.split(' '), (w) => _.capitalize(w.toLowerCase())).join(' ')

sauf si je l'ai manqué, lodash n'a pas ses propres méthodes minuscules/majuscules.

0
répondu agmcleod 2016-06-28 19:13:01

pas aussi concis que la réponse de @4castle, mais descriptif et plein de lodash, néanmoins...

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>
0
répondu m-a-r-c-e-l-i-n-o 2016-06-28 21:07:02

voici une autre solution pour mon étui: "devil's backbone "

simplement:

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

utiliser startCase supprimerait l'apostrophe, donc j'ai dû contourner cette limitation. Les autres solutions semblaient assez compliquées. J'aime ce que c'est propre, facile à comprendre.

0
répondu albertpeiro 2017-12-31 16:20:25

avec lodash 4, vous pouvez utiliser _.capitaliser ()

_.capitalize('JOHN') Il retourne 'John '

voir https://lodash.com/docs/4.17.5#capitalize pour plus de détails

-3
répondu LI Zhuoran 2018-03-22 08:31:12