web-dev-qa-db-fra.com

Lodash title case (première lettre majuscule de chaque mot)

Je regarde les documents lodash et d’autres questions relatives à Stack Overflow - bien qu’il y ait il existe plusieurs manières JavaScript natives d’accomplir cette tâche , y at-il un moyen de convertir une chaîne en cas de titre en utilisant pursement fonctions lodash (ou au moins fonctions prototypes existantes) pour que je n’aie pas à utiliser une expression régulière ni à définir une nouvelle fonction?

par exemple. 

This string ShouLD be ALL in title CASe

devraient devenir

This String Should Be All In Title Case
43
brandonscript
_.startCase(_.camelCase(str))

Pour le texte non généré par l'utilisateur, cela traite 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'
24
aristidesfl
'This string ShouLD be ALL in title CASe'
  .split(' ')
  .map(_.capitalize)
  .join(' ');
12
CD..

Voici une méthode utilisant UNIQUEMENT les méthodes lodash et aucune méthode intégrée:

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

Voici une autre solution pour mon cas d'utilisation: "Dorsale"

Simplement:

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

L'utilisation de startCase supprimait l'apostrophe. Je devais donc contourner cette limitation. Les autres solutions semblaient assez compliquées. J'aime ça car c'est propre, facile à comprendre.

0
albertpeiro

Le code ci-dessous fonctionnera parfaitement:

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

0
Tarun Majumder
 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 majuscules/minuscules.

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

Vous pouvez également diviser la fonction map pour faire des mots séparés

0
Luke Robertson

Pas aussi concis que la réponse de @ 4castle, mais descriptif et complet, 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
m-a-r-c-e-l-i-n-o