javascript - Lodash titel på stora bokstäver (första bokstaven i varje ord i versaler)


Jag tittar igenom lodash-dokumentationen och andra frågor på Stack Overflow - medan det finns flera inbyggda JavaScript-sätt att utföra denna uppgift, finns det ett sätt jag kan konvertera en sträng till titelcase med enbart lodash-funktioner (eller åtminstone befintliga prototypfunktioner) så att jag inte behöver använda ett reguljärt uttryck eller definiera en ny funktion?

t.ex.

This string ShouLD be ALL in title CASe

bör bli

This String Should Be All In Title Case

Svar #1

Detta kan göras med en liten modifiering av 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>

Svar #2

_.startCase(_.camelCase(str))

För icke-användargenererad text hanterar detta fler fall än det accepterade svaret

> 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'

Svar #3

med lodash version 4.

_.upperFirst(_.toLower(str))

Svar #4

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

Svar #5

Det finns blandade svar på denna fråga. Vissa rekommenderar att använda _.upperFirst medan andra rekommenderar _.startCase.

Känn skillnaden mellan dem.

i) _.upperFirst kommer att omvandla den första bokstaven i din sträng, strängen kan sedan vara ett enda ord eller flera ord men endast den första bokstaven i din sträng omvandlas till versal.

_.upperFirst('jon doe')

utdata :

Jon doe

kolla dokumentationen https://lodash.com/docs/4.17.10#upperFirst

ii) _.startCase kommer att omvandla den första bokstaven i varje ord i din sträng.

_.startCase('jon doe')

utdata :

Jon Doe

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

Svar #6

Det är enligt min åsikt den renaste och mest flexibla implementeringen, baserat på att jag testat den på mina egna användningsfall.

import { capitalize, map } from "lodash";

const titleCase = (str) => map(str.split(" "), capitalize).join(" ");

// titleCase("ALFRED NÚÑEZ") => "Alfred Núñez"
// titleCase("alfred núñez") => "Alfred Núñez"
// titleCase("AlFReD nÚñEZ") => "Alfred Núñez"
// titleCase("-") => "-"

Relaterade artiklar