Array Adalah Daftar Berurutan
Array di JavaScript menyimpan nilai-nilai dalam urutan tertentu. Nilainya bisa bertipe apa saja, seperti angka, string, objek, bahkan array lain, dan tidak harus bertipe sama semua. Kamu membuatnya dengan kurung siku:
Sintaks literal itulah yang akan kamu pakai untuk membuat array hampir setiap saat. Ada juga new Array(...), tetapi ada jebakannya: new Array(3) membuat array dengan panjang 3 tanpa elemen sungguhan, bukan [3]. Tetap pakai [].
Index Dimulai dari Nol
Kamu mengakses elemen berdasarkan posisinya, mulai dari 0:
Ada dua hal yang perlu dicatat. Pertama, mengakses index di luar ujung array tidak memunculkan error, melainkan mengembalikan undefined. Ini sumber umum bug "kenapa nilainya undefined?". Kedua, kamu bisa mengisi index mana pun, termasuk yang melewati ujung array, dan JavaScript dengan senang hati akan memperpanjang array-nya:
Posisi 3 dan 4 menjadi "slot kosong" (lubang pada array renggang). Panjangnya melompat menjadi 6. Kamu jarang menginginkan ini. Ini efek samping dari betapa fleksibelnya array, bukan fitur untuk diandalkan.
length Selalu Terbarui
array.length selalu satu lebih besar dari index tertinggi. Nilainya otomatis berubah saat kamu menambah atau menghapus elemen:
Trik terakhir itu layak diingat: mengisi length akan memotong array. Menulis nums.length = 0 adalah cara cepat untuk mengosongkan array langsung di tempat.
push, pop, shift, unshift
Empat method untuk menambah dan menghapus elemen di ujung array:
push(x)menambah di akhir, mengembalikan panjang yang baru.pop()menghapus dari akhir, mengembalikan elemen yang dihapus.unshift(x)menambah di awal.shift()menghapus dari awal.
push/pop cepat. shift/unshift harus menyusun ulang index semua elemen lain, jadi lebih lambat pada array besar. Tidak masalah untuk ukuran sehari-hari, tetapi perlu kamu ketahui kalau bekerja dengan jutaan item.
slice vs splice
Keduanya punya nama yang mirip dan perilaku yang sama sekali berbeda. Kalau kamu bisa membedakannya, kamu akan terhindar dari banyak kebingungan.
slice(start, end) mengembalikan salinan dari sebagian array. Array aslinya tidak tersentuh. end tidak ikut disertakan:
splice(start, deleteCount, ...items) mengubah array. Method ini bisa menghapus, menyisipkan, atau keduanya, dan mengembalikan apa pun yang dihapusnya:
Pegangan praktis: kalau kata itu mengingatkanmu pada mengiris sepotong roti untuk diambil salinannya, itu slice. Kalau mengingatkanmu pada menyambung potongan film (memotong lalu menyisipkan), itu splice.
Mencari Sesuatu: indexOf, includes, find
Tiga cara mencari sesuatu, untuk situasi yang berbeda:
indexOf(x)memberimu posisinya, atau-1kalau tidak ditemukan. Berguna saat kamu butuh index-nya.includes(x)memberimu boolean. Lebih rapi saat kamu hanya ingin tahu "apakah ini ada di sini?". Method ini juga menanganiNaNdengan benar, yang tidak bisa dilakukanindexOf.find(predicate)menjalankan fungsi untuk setiap elemen dan mengembalikan elemen pertama yang cocok. Inilah pilihan untuk array berisi objek, karenaindexOfdanincludeshanya melakukan pengecekan kesamaan ketat.
Perulangan pada Array
Ada beberapa cara yang bagus, masing-masing cocok untuk situasi berbeda:
for...of adalah pilihan default: mudah dibaca, bekerja dengan iterable apa pun, dan langsung memberimu nilainya. forEach cocok saat kamu juga butuh index-nya dan tidak perlu keluar dari loop lebih awal (kamu tidak bisa break dari forEach). for klasik dengan index memang lebih panjang, tetapi memberimu kendali penuh. Pakai saat kamu perlu melewati elemen, melakukan iterasi mundur, atau keduanya.
Satu loop yang sebaiknya dihindari: for...in. Loop ini melakukan iterasi pada key dan ikut menyertakan property warisan. Itu untuk objek, bukan array.
Menyalin dan Menggabungkan
Array adalah nilai referensi. Menugaskan satu array ke variabel lain tidak menyalinnya, melainkan membuat dua nama untuk array yang sama:
Untuk benar-benar menyalin, pakai operator spread atau slice():
Keduanya memberimu salinan dangkal: array tingkat atasnya baru, tetapi kalau elemennya berupa objek, objek-objek itu tetap dipakai bersama. Spread juga cara paling rapi untuk menggabungkan array:
Array Berisi Objek
Dalam kode sungguhan, sebagian besar array berisi objek. Method yang sama tetap berlaku, tetapi pencocokannya jadi lebih menarik:
filter mengembalikan array baru berisi elemen yang cocok dengan predikat. map mengembalikan array baru di mana setiap elemen sudah diubah. Merangkai keduanya adalah keseharian saat bekerja dengan array berisi objek, dan halaman dokumentasi berikutnya membahas keluarga method itu lebih dalam.
Array vs Objek
Model mental singkatnya: pakai array saat urutan penting dan kamu bekerja dengan daftar hal yang sejenis. Pakai objek (atau Map) saat kamu memberi key berupa nama pada data. "Pertama, kedua, ketiga" adalah wilayah array. "Cari user dengan id 42" adalah wilayah objek atau Map.
Kamu bisa mencampurnya, karena array berisi objek ada di mana-mana, tetapi jangan pakai array sebagai kamus ber-key, dan jangan pakai objek sebagai daftar berurutan. Masing-masing melakukan satu tugas dengan baik.
Berikutnya: Destructuring
Mengambil nilai dari array berdasarkan index (dan property dari objek berdasarkan nama) cukup sering dilakukan sehingga JavaScript punya sintaks khusus untuknya. Itulah destructuring, dan itu topik berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara membuat array di JavaScript?
Pakai sintaks literal dengan kurung siku: const fruits = ['apple', 'banana']. Itulah cara yang lazim. Constructor Array (new Array(3)) memang ada, tetapi jarang sesuai dengan yang kamu mau: new Array(3) membuat array dengan panjang 3 tanpa elemen sungguhan, dan ini sering mengejutkan orang.
Bagaimana cara menghapus item dari array di JavaScript?
Dari akhir, pakai pop(). Dari awal, pakai shift(). Dari mana saja di tengah, pakai splice(index, 1) untuk mengubah array langsung di tempat, atau filter(...) untuk mendapatkan array baru tanpa item tersebut. splice mengubah array asli; filter tidak.
Apa bedanya slice dan splice?
slice(start, end) mengembalikan salinan dangkal dari sebagian array dan membiarkan aslinya. splice(start, deleteCount, ...items) mengubah array asli: method ini menghapus elemen, bisa juga menyisipkan elemen baru, lalu mengembalikan elemen yang dihapus. Beda satu huruf, perilakunya sangat berbeda.
Bagaimana cara mengecek apakah sebuah nilai ada di array JavaScript?
Pakai array.includes(value). Method ini mengembalikan true atau false dan menangani NaN dengan benar. indexOf(value) mengembalikan posisinya atau -1 kalau tidak ditemukan, berguna saat kamu juga butuh index-nya. Untuk pencocokan yang lebih rumit, pakai some(predicate) atau find(predicate).