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
brandonscript
sumber
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));

4castle
sumber
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'
aristidesfl
sumber
27

dengan lodash versi 4.

_.upperFirst(_.toLower(str))

James Nguyen
sumber
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(' ');
CD..
sumber
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

Vishal Shetty
sumber
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)
Brandon
sumber
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

Luke Robertson
sumber
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.

agmcleod.dll
sumber
@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>

marcelino
sumber
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.

albertpeiro.dll
sumber
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'
Justin Brown
sumber
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());
Tarun Majumder
sumber
-3

dengan lodash 4, Anda dapat menggunakan _.capitalize ()

_.capitalize('JOHN') Ini mengembalikan 'John'

Lihat https://lodash.com/docs/4.17.5#capitalize untuk detailnya

LI Zhuoran
sumber
Akan lebih baik untuk menguji use case untuk kalimat kata. Dugaan ini tidak membuat huruf besar semua huruf pertama dari setiap kata.
brandonscript
Memang, 'kalimat' mengeluarkan 'Kalimat'
Andres Zapata