Lodash 제목 케이스 (모든 단어의 첫 글자 대문자)


108

lodash 문서 및 기타 Stack Overflow 질문을 살펴보고 있습니다. 이 작업을 수행하는 몇 가지 기본 JavaScript 방법 이 있지만 순수하게 lodash 함수 (또는 최소한 기존 프로토 타입 함수)를 사용하여 문자열을 제목 케이스로 변환 할 수있는 방법이 있습니까? 정규식을 사용하거나 새 함수를 정의 할 필요가 없도록?

예 :

This string ShouLD be ALL in title CASe

되어야한다

This String Should Be All In Title Case


3
당신은 또한 HTML에서 같은 일을 할 수 = 스타일을 "텍스트 변환 : 대문자"
Chaudhary

답변:


213

다음을 약간 수정하여 수행 할 수 있습니다 startCase.

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


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

2
나는 그것을 좋아한다. 에 대해 몰랐습니다 startCase.
Brandon

1
.startCase ( "camelString") === "낙타 문자열"하지만 _.startCase ( lodash가 타이틀 케이스 방법이 필요 같은 .toLower는 ( "camelString은")) === "Camelstring"는 것
aristidesfl

4
나는 이것을 좋아하지만, 같은 문자를 제거 :하는 것이 문제입니다.
JabberwockyDecompiler

1
악센트가있는 이름 (스페인어 "Martínez Cortés Peña"가 "Martinez Cortes Pena"가 됨) 또는 하이픈 (프랑스어 "Jean-Louis"가 "Jean Louis"가 됨)에 대해서는 작동하지 않습니다. lodash의 "* Case"함수도 마찬가지입니다.
Flo

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

사용자가 생성하지 않은 텍스트의 경우 허용 된 답변보다 더 많은 케이스를 처리합니다.

> 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

lodash 버전 4.

_.upperFirst(_.toLower(str))


3
이것은 startCaseaz보다 더 많은 문자를 처리 할 수 ​​있기 때문입니다 (예 : å, ä 및 ö).
Lars Nyström

3
upperFirst는 다음 단어가 아닌 첫 번째 단어의 첫 번째 문자 만 변경합니다. 이 특별한 이유 때문에 이것이 startCase보다 낫다고 생각하지 않습니다.
Raghavan

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

1
확실히 가장 간결합니다. 분명히 여전히 배열로 분할해야하지만 이것이 내가 말할 수있는 가장 짧고 가장 달콤한 솔루션입니다. 또한 @AlexandreThebaldi가 지적한 1528 문제 upperFirst에 따라 capitalize.
brandonscript

...하지만 _.startCase 확실히 :) 승리
brandonscript

5
_.startCase구두점을 제거합니다. 예 _.startCase('first second etc...문자열을 반환First Second Etc
LuckyStarr

이 같은 내 사용 사례에 대한 더 나은했다 startCase예를 들어 빈에 변환의 모든 user_nameUser Name, 그리고 난 단지 원 User_nametext-transform: capitalizeCSS의 특성
gonzarodriguezt

7

이 질문에 대한 대답은 엇갈립니다. 일부는 사용 _.upperFirst을 권장 하고 일부는 _.startCase.

그들 사이의 차이점을 아십시오.

i) _.upperFirst문자열의 첫 문자를 변환 한 다음 문자열은 단일 단어 또는 여러 단어로 구성 될 수 있지만 문자열의 첫 번째 문자 만 대문자로 변환됩니다.

_.upperFirst('jon doe')

산출:

Jon doe

https://lodash.com/docs/4.17.10#upperFirst 문서를 확인 하십시오.

ii) _.startCase문자열 안에있는 모든 단어의 첫 글자를 변환합니다.

_.startCase('jon doe')

산출:

Jon Doe

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


네,하지만 대소 문자 혼합 문자열은 어떻습니까? 둘 다 'jOn DoE'를 'Jon Doe'로 만들지 않습니다 _.lower().
brandonscript

3

다음은 lodash 메서드 만 사용하고 내장 메서드는 사용하지 않는 방법입니다.

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

지도 기능을 분리하여 별도의 단어를 수행 할 수도 있습니다.


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

내가 놓치지 않는 한 lodash에는 자체 소문자 / 대문자 방법이 없습니다.


@vbotio 외모 좋아하는 _.upperFirst단지가 첫 번째 문자에 적용 (동의어 _.capitalize()?)
brandonscript

1
capitalize그리고 upperFirst다른 일을합니다.
Brandon

_.capitalize는 전체 문자열에 적용됩니다
vbotio

0

@ 4castle의 답변만큼 간결하지는 않지만 그럼에도 불구하고 설명적이고 lodash-full ...

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>


대답의 장황함과 길이가 거의 바람직하지 않다고 생각합니다. 나는 반대표를 던지지 않았지만 이것이 나의 첫 번째 선택은 아니 었습니다.
brandonscript

0

내 사용 사례에 대한 또 다른 솔루션이 있습니다. "악마의 백본"

간단히:

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

startCase를 사용하면 아포스트로피가 제거되므로이 제한을 해결해야했습니다. 다른 솔루션은 상당히 복잡해 보였습니다. 깨끗하고 이해하기 쉽기 때문에 좋아합니다.


0

이것은 lodash로만 할 수 있습니다

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

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

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

lodash에서 대문자와 단어가 필요합니다.
Justin Brown


예,하지만 lodash에서 함수를 호출하지 않습니다. 당신은 어떻게 든 그들을 별칭을하지 않는 한var words = ._words
brandonscript

0

아래 코드는 완벽하게 작동합니다.

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

-3

lodash 4에서는 _.capitalize ()를 사용할 수 있습니다.

_.capitalize('JOHN') 'John'을 반환합니다.

자세한 내용은 https://lodash.com/docs/4.17.5#capitalize 를 참조하십시오.


단어 문장에 대한 사용 사례를 테스트하는 것이 좋습니다. 이것이 각 단어의 모든 첫 글자를 대문자로 사용하지 않는 것으로 의심됩니다.
brandonscript

사실, '문장'출력 '문장'
안드레스 파타
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.