Lodashタイトルケース(すべての単語の最初の文字を大文字)


107

私はlodashドキュメントと他のスタックオーバーフローの質問を調べています。このタスクを実行するためのネイティブJavaScriptの方法はいくつかありますが純粋に lodash関数(または少なくとも既存のプロトタイプ関数)を使用して文字列をタイトルケースに変換する方法はありますか正規表現を使用したり、新しい関数を定義したりする必要がないようにするには?

例えば

This string ShouLD be ALL in title CASe

なるはず

This String Should Be All In Title Case


3
HTMLからも同じことができます、style = "text-transform:capitalize"
Chaudhary

回答:


212

これは、以下を少し変更することで実行できますstartCase

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


3
_.startCase("aaa BBB ccc") === "Aaa BBB Ccc"
ブランドン

2
私はそれが好きです。知りませんでしたstartCase
ブランドン

1
.startCase( "camelString")=== "Camel String"ですが、_。startCase( .toLower( "camelString"))=== "Camelstring"は、lodashがtitleCaseメソッドを必要とするようです
aristidesfl

4
私はこれが好きですが、のような文字が削除される:という問題があります。
JabberwockyDecompiler

1
アクセント付きのファーストネーム(スペイン語の "MartínezCortésPeñ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
これはstartCase、az、ä、öなどのazよりも多くの文字を処理できるため、より優れています。
LarsNyström18年

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_nameなりUser Name、そして私は望んでいたUser_nameようにtext-transform: capitalizeCSSのプロパティ
gonzarodriguezt

6

この質問にはさまざまな答えがあります。いくつかは使用_.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異なることを行います。
ブランドン

_.capitalizeは文字列全体に適用されます
vbotio '28

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

これはロダッシュだけで行うことができます

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

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

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

大文字とlodashからの単語を要求する必要があります。
ジャスティンブラウン


はい。ただし、lodashから関数を呼び出しているわけではありません。何らかの方法でエイリアスを設定していない限りvar words = ._words
brandonscript


-3

lodash 4では、_。capitalize()を使用できます

_.capitalize('JOHN') 「ジョン」を返します

詳細については、https://lodash.com/docs/4.17.5#capitalizeを参照してください


単語の文のユースケースをテストするのが良いでしょう。これが各単語の最初の文字すべてを大文字にするわけではないことを疑います。
ブランドスクリプト2018年

実際、「文」は「文」を出力します
Andres Zapata
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.