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
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>
_.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'
'This string ShouLD be ALL in title CASe'
.split(' ')
.map(_.capitalize)
.join(' ');
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)
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
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.
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>
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.
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