Kapitalisasi judul Lodash (huruf besar pertama dari setiap kata)


108

Saya melihat-lihat dokumen lodash dan pertanyaan Stack Overflow lainnya - sementara ada beberapa cara JavaScript asli untuk menyelesaikan tugas ini , adakah cara saya dapat mengonversi string menjadi kasus judul menggunakan fungsi lodash murni (atau setidaknya fungsi prototipe yang ada) sehingga saya tidak perlu menggunakan ekspresi reguler atau mendefinisikan fungsi baru?

misalnya

This string ShouLD be ALL in title CASe

harus menjadi

This String Should Be All In Title Case


3
Anda juga dapat melakukan hal yang sama dari HTML, style = "text-transform: capitalize"
Chaudhary

Jawaban:


213

Ini dapat dilakukan dengan sedikit modifikasi startCase:

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


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

2
Saya suka itu. Saya tidak tahu tentang startCase.
Brandon

1
.startCase ("camelString") === "Camel String" tapi _.startCase ( .toLower ("camelString")) === "Camelstring" sepertinya lodash membutuhkan metode
titleCase

4
Saya suka ini, bagaimanapun, ini menghilangkan karakter seperti :, itu adalah masalah.
JabberwockyDecompiler

1
Ini tidak bekerja untuk nama depan dengan aksen (Spanyol "Martínez Cortés Peña" menjadi "Martinez Cortes Pena") atau dengan tanda hubung (Prancis "Jean-Louis" menjadi "Jean Louis"). Hal yang sama berlaku untuk setiap fungsi "* Kasus" dari lodash
Flo

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

Untuk teks yang tidak dibuat oleh pengguna, ini menangani lebih banyak kasus daripada jawaban yang diterima

> 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

dengan lodash versi 4.

_.upperFirst(_.toLower(str))


3
Yang ini lebih baik daripada startCasekarena dapat menangani lebih banyak huruf daripada az, misalnya å, ä dan ö.
Lars Nyström

3
upperFirst hanya akan mengubah karakter pertama kata pertama, tidak untuk kata-kata berikutnya. Saya tidak percaya ini lebih baik daripada startCase karena alasan khusus ini.
Raghavan

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

1
Pasti paling ringkas, suka. Jelas masih membutuhkan pemisahan menjadi sebuah array, tetapi itu masih merupakan solusi terpendek dan termanis dari apa yang dapat saya katakan. Selain itu, menurut masalah 1528 yang diindikasikan oleh @AlexandreThebaldi, mungkin sebaiknya digunakan upperFirstsebagai ganti capitalize.
brandonscript

... tapi _.startCase pasti menang :)
brandonscript

5
_.startCasemenghapus tanda baca. Contoh _.startCase('first second etc...mengembalikan stringFirst Second Etc
LuckyStarr

Ini lebih baik untuk kasus penggunaan saya sebagai startCasemualaf segalanya untuk kosong misalnya user_nameakan User Name, dan saya hanya ingin User_nameseperti text-transform: capitalizemilik CSS
gonzarodriguezt

7

Ada beragam jawaban untuk pertanyaan ini. Beberapa merekomendasikan penggunaan _.upperFirstsementara beberapa merekomendasikan _.startCase.

Ketahui perbedaan di antara mereka.

i) _.upperFirstakan mengubah huruf pertama dari string Anda, kemudian string mungkin dari satu kata atau beberapa kata tetapi satu-satunya huruf pertama dari string Anda diubah menjadi huruf besar.

_.upperFirst('jon doe')

keluaran:

Jon doe

periksa dokumentasi https://lodash.com/docs/4.17.10#upperFirst

ii) _.startCaseakan mengubah huruf pertama dari setiap kata di dalam string Anda.

_.startCase('jon doe')

keluaran:

Jon Doe

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


Ya, tapi bagaimana dengan kasus string campuran? Tak satu pun dari ini akan membuat 'jOn DoE' menjadi 'Jon Doe' tanpa _.lower().
brandonscript

3

Berikut adalah cara menggunakan HANYA metode lodash dan tanpa metode bawaan:

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

Anda juga dapat membagi fungsi peta untuk membuat kata-kata terpisah


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

Kecuali saya melewatkannya, lodash tidak memiliki metode huruf kecil / besar sendiri.


@vbotio sepertinya _.upperFirsthanya berlaku untuk karakter pertama (sinonim untuk _.capitalize()?)
brandonscript

1
capitalizedan upperFirstmelakukan berbagai hal.
Brandon

_.capitalize berlaku untuk seluruh string
vbotio

0

Tidak sesingkat jawaban @ 4castle, tetapi deskriptif dan lengkap, namun ...

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>


Saya rasa verbositas dan panjang jawaban membuatnya hampir tidak diinginkan. Saya tidak downvote, tapi itu bukan pilihan pertama saya.
brandonscript

0

Berikut solusi lain untuk kasus penggunaan saya: "tulang punggung setan"

Secara sederhana:

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

Menggunakan startCase akan menghapus apostrof, jadi saya harus mengatasi batasan itu. Solusi lain sepertinya cukup berbelit-belit. Saya suka ini karena bersih, mudah dimengerti.


0

Ini bisa dilakukan hanya dengan lodash

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

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

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

Anda perlu menggunakan huruf besar dan kata-kata dari lodash.
Justin Brown


Ya, tapi Anda tidak memanggil fungsi dari lodash; kecuali Anda telah membuat alias mereka entah bagaimanavar words = ._words
brandonscript

0

Kode di bawah ini akan bekerja dengan sempurna:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.