Skip to content

Cara membuat tulisan menjadi kapital di JavaScript

Tldr

1
2
3
function capitalize (word) {
  return word.charAt(0).toUpperCase() + word.substr(1)
}

Penjelasan

Pada dasarnya tulisan kapital adalah tulisan yang huruf pertama nya besar. Jika input nya adalah halo nama saya fariz, maka outputnya adalah Halo nama saya fariz. Pertama, yang kita lakukan adalah mengambil huruf pertama dari tulisan.

1
2
3
4
const tulisan = 'halo nama saya fariz'
const hurufPertama = tulisan.charAt(0)

console.log(hurufPertama) // h

Kita bisa mengambil huruf pertama dengan menggunakan method charAt(). Method tersebut merupakan properti dari object string, karena variable tulisan bertipe string. Setelah kita mengambil nilainya (huruf pertama), sekarang kita buat huruf tersebut "kapital" dengan memanggil methods toUpperCase(), yang sama-sama properti dari object string.

1
2
3
4
const tulisan = 'halo nama saya fariz'
const hurufPertama = tulisan.charAt(0)

console.log(hurufPertama.toUpperCase()) // H

Setelah itu, mari kita gabungkan hurufPertama dengan nilai yang ada di variable tulisan

1
2
3
4
5
6
const tulisan = 'halo nama saya fariz'
const hurufPertama = tulisan.charAt(0)
const hurufDiKapital = hurufPertama.toUpperCase()
const hasil = hurufDiKapital + tulisan

console.log(hasil) // Hhalo nama saya fariz

Well, secara teknis sudah benar. Namun bukan itu yang kita inginkan, bukan? Nah, logikanya: Ambil semua nilai dari variable tulisan kecuali huruf pertama. Karena nilai huruf pertama sumbernya dari variable hurufDiKapital, kan?

Kita bisa menggunakan method .substr() yang masih dari object string tersebut. Method substr menerima 2 parameter: start yakni index dari huruf awal yang ingin diambil, dan parameter length?, opsional. Jika nilai length diisi, berarti huruf yang akan diambil dari index start, sampai index length.

Karena kita cuma ingin ambil semua huruf kecuali huruf pertama (yakni di index 0), berarti kita isi nilai dari start tersebut menjadi 1.

1
2
3
4
5
6
7
8
9
const tulisan = 'halo nama saya fariz'
const hurufPertama = tulisan.charAt(0)
const hurufDiKapital = hurufPertama.toUpperCase()
const hasil = hurufDiKapital + tulisan.substr(1)

console.log(hurufDiKapital) // H
console.log(tulisan.substr(1)) // alo nama saya fariz

console.log(hasil) // Halo nama saya fariz

Solved! But, another problem?

Tapi bagaimana bila saya ingin meng-kapitalkan seluruh kata? Misal, menjadi Halo Nama Saya Fariz? Well, menurut gue itu udah beda konteks ya. Bukan "capitalize" lagi, tapi "titlelize". But whatever, kalau itu yang kalian inginkan, mari kita fikirkan konsepnya.

Ingat kan kalau "String" merupakan kumpulan dari "Char"? "fariz", merupakan kumpulan huruf yang bernilai:

1
2
["f", "a", "r", "i", "z"]
  0    1    2    3    4   (index)

Maka dari itu kita bisa mengambil nilainya via method charAt() dengan parameter index huruf yang kita ambil. Karena disini kita ingin mengkapitalkan semua kata, berarti konsepnya, kita buat tulisan tersebut menjadi kumpulan string. Misal menjadi begini:

1
2
["halo", "nama", "saya", "fariz"]
    0       1       2        3     (index)

Kita bisa membuatnya menggunakan methods split(), dengan parameter "pemisah". Karena dari contoh diatas, pemisahnya adalah spasi, maka kita isi parameter pemisah tersebut dengan... Spasi.

1
2
3
4
const tulisan = 'halo nama saya fariz'
const pisah = tulisan.split(' ')

console.log(pisah) // ['halo', 'nama', 'saya', 'fariz']

Nice. Sisanya, tinggal lakukan iterasi untuk setiap kata, dan buat menjadi kapital. Kita bisa saja menggunakan pengulangan for, tapi saya tipe yang menghindari perulangan sebisa mungkin. Maka disini kita akan menggunakan method map()

1
2
3
4
5
const hasil = pisah.map(huruf =>
  huruf.charAt(0).toUpperCase() + huruf.substr(1)
)

console.log(hasil) // ['Halo', 'Nama', 'Saya', 'Fariz']

Cool. Apa maksud dari kode diatas? Pertama, kita buat iterasi terhadap setiap element yang ada, sisanya, sama seperti fungsionalitas untuk membuat tulisan menjadi kapital tersebut. Bagian ini:

1
2
pisah.map(huruf =>
  ...

Hanyalah "cara singkat" untuk menulis (closure) function yang memiliki 1 parameter dengan identifier huruf. Alias, sama saja seperti ini:

1
2
3
const hasil = pisah.map(function (huruf) {
  return ...
}

Cara alternatif nya adalah dengan melakukan looping seperti ini:

1
2
3
4
5
6
7
const hasil = []

for (let i = 0; i < pisah.length; i++) {
  hasil.push(pisah[i].charAt(0).toUpperCase() + pisah[i].substr(1))  
}

console.log(hasil) // ['Halo', 'Nama', 'Saya', 'Fariz']

Karena fungsi map, menghasilkan array baru. Jadi, kita tidak perlu membuat variable lagi untuk menampung hasil dari operasi "kapitalisasi" kita tersebut. Mungkin bisa saja kita "mutating" langsung ke array yang dituju, but seriously?

Kesimpulan

Untuk mengkapitalkan semua kata, kode nya adalah seperti ini:

1
2
3
4
5
function capitalizeAll (words) {
  return words.split(' ')
    .map(word => word.charAt(0).toUpperCase() + word.substr(1))
    .join(' ')
}

Atau, demi "DRY", hasil akhirnya adalah seperti ini:

1
2
3
4
5
6
7
8
9
function capitalize (word) {
  return word.charAt(0).toUpperCase() + word.substr(1)
}

function capitalizeAll (words) {
  return words.split(' ')
    .map(word => capitalize(word))
    .join(' ')
}

join() adalah method untuk menggabungkan semua elemen di array menjadi string berdasarkan "pemisah" yang dimaksud.

Demo

Apa yang telah kita pelajari disini?

Komentar