Caso del titolo Lodash (prima lettera maiuscola di ogni parola)


108

Sto esaminando i documenti di lodash e altre domande su Stack Overflow: sebbene ci siano diversi modi JavaScript nativi per svolgere questa attività , esiste un modo in cui posso convertire una stringa in caso del titolo utilizzando funzioni puramente lodash (o almeno funzioni prototipali esistenti) in modo da non dover utilizzare un'espressione regolare o definire una nuova funzione?

per esempio

This string ShouLD be ALL in title CASe

dovrebbe diventare

This String Should Be All In Title Case


3
puoi fare la stessa cosa anche da HTML, style = "text-transform: capitalize"
— Chaudhary

Risposte:


214

Questo può essere fatto con una piccola modifica di startCase:

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


3
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
— Brandon

2
Mi piace. Non lo sapevo startCase.
— Brandon

1
.startCase ("camelString") === "Camel String" ma _.startCase (.toLower ( "camelString")) === "Camelstring" sembra che lodash abbia bisogno di un metodo titleCase
— aristidesfl

4
Mi piace, tuttavia, rimuove caratteri come :, questo è un problema.
— JabberwockyDecompiler

1
Non funziona per nomi con accento (lo spagnolo "Martínez Cortés Peña" diventa "Martinez Cortes Pena") o con trattini (il francese "Jean-Louis" diventa "Jean Louis"). Lo stesso vale per tutte le funzioni "* Case" del lodash
— Flo

42
_.startCase(_.camelCase(str))

Per il testo non generato dall'utente, gestisce più casi rispetto alla risposta accettata

> 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

con la versione lodash 4.

_.upperFirst(_.toLower(str))


3
Questo è migliore del startCaseperché può gestire più lettere di az, ad esempio å, ä e ö.
— Lars Nyström

3
upperFirst cambierà solo il primo carattere della prima parola, non per le parole successive. Non credo che questo sia meglio di startCase per questo motivo particolare.
— Raghavan

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

1
Sicuramente il più conciso, piace. Ovviamente richiede ancora la suddivisione in un array, ma questa è ancora la soluzione più breve e dolce da quello che posso dire. Inoltre, per il numero 1528 indicato da @AlexandreThebaldi, probabilmente dovrebbe usare upperFirstinvece di capitalize.
— brandonscript

... ma _.startCase vince sicuramente :)
— brandonscript

5
_.startCaserimuove la punteggiatura. L'esempio _.startCase('first second etc...restituisce la stringaFirst Second Etc
— LuckyStarr

Questo è stato il migliore per il mio caso d'uso come startCaseconvertiti tutto per un vuoto, ad esempio user_namesarà User Name, e volevo solo User_namecome iltext-transform: capitalize proprietà di CSS
— gonzarodriguezt

7

Ci sono risposte contrastanti a questa domanda. Alcuni ne consigliano l'utilizzo _.upperFirstmentre altri lo consigliano _.startCase.

Conosci la differenza tra loro.

i) _.upperFirsttrasformerà la prima lettera della tua stringa, quindi la stringa potrebbe essere di una singola parola o più parole ma l'unica prima lettera della tua stringa viene trasformata in maiuscolo.

_.upperFirst('jon doe')

produzione:

Jon doe

controlla la documentazione https://lodash.com/docs/4.17.10#upperFirst

ii) _.startCasetrasformerà la prima lettera di ogni parola all'interno della tua stringa.

_.startCase('jon doe')

produzione:

Jon Doe

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


Sì, ma per quanto riguarda le stringhe miste? Nessuno di questi trasformerà "jOn DoE" in "Jon Doe" senza _.lower().
— brandonscript

3

Ecco un modo utilizzando SOLO metodi lodash e nessun metodo integrato:

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

Puoi anche suddividere la funzione mappa per creare parole separate


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

A meno che non me lo sia perso, lodash non ha i propri metodi maiuscole / minuscole.


@vbotio sembra _.upperFirstsi applica solo al primo carattere (un sinonimo di _.capitalize()?)
— brandonscript,

1
capitalizee upperFirstfare cose diverse.
— Brandon

_.capitalize si applica all'intera stringa
— vbotio

0

Non così conciso come la risposta di @ 4castle, ma descrittivo e pieno di lodash, comunque ...

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>


Immagino che la verbosità e la lunghezza della risposta la rendano quasi indesiderabile. Non ho downvote, ma non sarebbe stata la mia prima scelta.
— brandonscript

0

Ecco un'altra soluzione per il mio caso d'uso: "spina dorsale del diavolo"

Semplicemente:

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

L'uso di startCase avrebbe rimosso l'apostrofo, quindi ho dovuto aggirare questa limitazione. Le altre soluzioni sembravano piuttosto contorte. Mi piace perché è pulito, facile da capire.


0

Questo può essere fatto solo con lodash

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

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

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

Devi richiedere lettere maiuscole e parole da lodash.
— Justin Brown


Sì, ma non stai chiamando le funzioni da lodash; a meno che tu non li abbia in qualche modo aliasvar words = ._words
— brandonscript

0

Il codice seguente funzionerà perfettamente:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.