Array adalah daftar yang isinya disimpan berjajar rapat, tanpa celah, dan tiap isi punya nomor urut (index) yang mulai dari 0. Di pelajaran ini kamu melihat berapa banyak kerja yang dibutuhkan tiap operasi: membaca, menambah, menyisipkan, dan menghapus. Bayangin deretan kursi bioskop yang terisi tanpa celah: duduk di kursi paling ujung itu gampang, tapi menyelip di tengah bikin semua orang di sebelah kanan harus geser satu kursi.
🧪 Tebakan cepat:
pushke array berisi 5 isi danpushke array berisi sejuta isi, mana yang lebih lama? Tebak dulu, jawabannya ada di bagian "Cepat di ujung, lambat di tengah".
Lima operasi pada satu array
Mulai dari [10, 20, 30, 40, 50], lalu jalankan lima operasi ini berurutan:
| Langkah | Kode | Yang digeser | Isi arr sesudahnya |
|---|---|---|---|
| 1 | arr[2] |
tidak ada (hasilnya 30) |
[10, 20, 30, 40, 50] |
| 2 | arr.push(60) |
tidak ada | [10, 20, 30, 40, 50, 60] |
| 3 | arr.splice(3, 0, 35) |
40, 50, 60 ke kanan | [10, 20, 30, 35, 40, 50, 60] |
| 4 | arr.splice(0, 1) |
6 isi ke kiri | [20, 30, 35, 40, 50, 60] |
| 5 | arr.pop() |
tidak ada | [20, 30, 35, 40, 50] |
const arr = [10, 20, 30, 40, 50];
console.log(arr[2]); // 30
arr.push(60); // [10, 20, 30, 40, 50, 60]
arr.splice(3, 0, 35); // [10, 20, 30, 35, 40, 50, 60]
arr.splice(0, 1); // [20, 30, 35, 40, 50, 60]
arr.pop(); // [20, 30, 35, 40, 50]
console.log(arr); // [20, 30, 35, 40, 50]
arr[2]membaca isi di index 2. Index mulai dari 0, jadi index 2 adalah isi ketiga,30.arr.push(60)menambah satu isi di akhir.arr.pop()membuang isi terakhir dan mengembalikannya.arr.splice(3, 0, 35)menyisipkan35di index 3. Angka pertama adalah posisinya, angka kedua (0) adalah berapa isi yang dihapus, lalu nilai yang disisipkan.arr.splice(0, 1)menghapus 1 isi mulai dari index 0. Isi sesudahnya maju menutup celahnya.
Cepat di ujung, lambat di tengah
Karena array gak boleh punya celah, kerjanya tergantung posisi:
- Membaca lewat index langsung ke kotaknya, gak ada yang dilewati.
- Menambah atau membuang di akhir (
push,pop) gak menyentuh isi lain. Jadipushke array sejuta isi sama cepatnya denganpushke array lima isi. Itu jawaban tebakannya. - Menyisipkan atau menghapus di tengah atau di awal (
splice,unshift,shift) memaksa semua isi sesudahnya geser satu kotak. - Mencari nilai tanpa tahu index-nya (
includes,indexOf) mengecek isi satu per satu.
Programmer menulis ini dengan Big O. O(1) artinya jumlah langkahnya tetap, berapa pun panjang array. O(n) artinya langkahnya ikut bertambah sesuai jumlah isi (n): datanya dua kali lipat, waktunya kira-kira dua kali lipat.
| Operasi | Contoh | Big O |
|---|---|---|
| Baca lewat index | arr[2] |
O(1) |
| Baca panjang array | arr.length |
O(1) |
| Tambah atau buang di akhir | push, pop |
O(1) |
| Sisip atau hapus di tengah atau di awal | splice, unshift, shift |
O(n) |
| Cari nilai | includes, indexOf |
O(n) |
Jadi array paling pas untuk data berurutan yang sering dibaca lewat index, dan ditambah atau dibuang di ujung belakang.
💡 Kenapa baca lewat index bisa langsung? Isi array disimpan berdempetan di memori. Komputer tahu alamat isi pertama, jadi alamat isi di index
icukup dihitung: alamat awal ditambahikali ukuran satu isi. Satu hitungan, berapa pun panjang array-nya.pushsesekali butuh kerja ekstra waktu array dipindah ke tempat yang lebih besar, tapi kalau dirata-rata, tiappushtetap O(1).
⚠️ Jebakan yang sering ketemu
unshiftdanshiftdi loop besar. Menambah atau mengambil di awal menggeser semua isi. Sejutaunshiftjauh lebih lambat daripada sejutapush.splicetanpa angka kedua.arr.splice(2)menghapus semua isi mulai index 2 sampai habis, bukan cuma satu. Tulisarr.splice(2, 1)kalau mau menghapus satu.includesyang dipanggil berkali-kali. Tiap panggilan mengecek satu per satu. Kalau kamu sering bertanya "ada gak", nanti ada Set yang lebih cocok.- Menghapus di tengah padahal urutan gak penting. Timpa isi itu dengan isi terakhir, lalu
pop(). Gak ada yang perlu digeser.
TL;DR: Array menyimpan isi berjajar tanpa celah, dengan index mulai dari 0. Membaca lewat index (arr[2]), membaca length, serta push dan pop di akhir semuanya O(1): langkahnya tetap berapa pun panjang array. Menyisipkan atau menghapus di tengah atau di awal (splice, unshift, shift) dan mencari nilai (includes) itu O(n), karena isi lain harus digeser atau dicek satu per satu. arr.splice(i, 1) menghapus satu isi di index i, dan arr.splice(i, 0, x) menyisipkan x di sana.