Coba simpen daftar 5 nama temen di JavaScript pake variabel terpisah: nama1, nama2, nama3, nama4, nama5. Berantakan, susah loop. Solusinya: array — satu variabel yang nyimpen kumpulan nilai berurutan, diakses lewat nomor urut (index). Array adalah salah satu struktur data paling penting di programming. Hampir semua yang kamu lihat di internet (list produk, daftar follower, history chat) dasarnya array.
💡 Index dimulai dari 0, bukan 1. Bukan typo, bukan bug — sengaja. Index sebenernya itu "jarak dari awal array". Item pertama jaraknya 0 dari awal, item kedua jaraknya 1, dst. Awalnya weird buat pemula, tapi ini standar di semua bahasa pemrograman utama (Python, Java, C, dll). Hafalin:
arr[0]= item pertama.
const buah = ["apel", "mangga", "jeruk"];
console.log(buah[0]); // "apel"
console.log(buah[1]); // "mangga"
console.log(buah[2]); // "jeruk"
console.log(buah[99]); // undefined (index tidak ada)
Panjang array dengan .length:
const angka = [10, 20, 30];
console.log(angka.length); // 3
// Akses elemen terakhir:
console.log(angka[angka.length - 1]); // 30
Menambah elemen di akhir — push():
const daftar = ["apel"];
daftar.push("mangga");
daftar.push("jeruk");
console.log(daftar); // ["apel", "mangga", "jeruk"]
console.log(daftar.length); // 3
Menghapus elemen terakhir — pop():
const angka = [1, 2, 3];
const terakhir = angka.pop();
console.log(terakhir); // 3 (yang dihapus)
console.log(angka); // [1, 2]
Mengecek keberadaan elemen — includes():
const nama = ["Ani", "Budi", "Citra"];
console.log(nama.includes("Budi")); // true
console.log(nama.includes("Dodi")); // false
Iterasi dengan for loop:
const warna = ["merah", "hijau", "biru"];
for (let i = 0; i < warna.length; i++) {
console.log(i, warna[i]);
}
// 0 merah
// 1 hijau
// 2 biru
Ringkasan operasi dasar yang wajib kamu kuasai:
| Operasi | Contoh | Kegunaan |
|---|---|---|
| Indexing | arr[0] |
Akses elemen berdasarkan posisi |
length |
arr.length |
Jumlah elemen |
push(x) |
arr.push("x") |
Tambah di akhir |
pop() |
arr.pop() |
Hapus dari akhir |
includes(x) |
arr.includes("x") |
Cek keberadaan |
Setelah kamu nyaman dengan operasi-operasi ini, lesson berikutnya akan memperkenalkan method yang lebih canggih: map, filter, dan reduce.
🎭 Analogi sehari-hari
Array = rak buku berurutan dengan nomor di tiap slot. Slot pertama bernomor 0 (bukan 1!), karena di JS rak dihitung dari "jarak ke awal rak" — slot pertama jaraknya 0.
[0] [1] [2] [3]
"apel" "mangga" "jeruk" "duku"
push() = taruh buku baru di ujung kanan. pop() = ambil yang paling kanan. length = total buku di rak.
⚠️ Jebakan yang sering ditemui
- Index dimulai dari 0, bukan 1. Slot terakhir =
arr.length - 1.arr[arr.length]= undefined. - Akses index out-of-range tidak error — return
undefined.["a"][99]=undefined, tidak throw. lengthadalah PROPERTI, bukan method —arr.length(tanpa()).arr.length()= TypeError.push&popMUTATE array asli — return nilai berbeda.pushreturn length baru,popreturn elemen yang dihapus. Sering bingung.arr[arr.length] = xsama denganarr.push(x)— bisa dipakai, tapipushlebih jelas niatnya.- Menyalin array —
let b = atidak bikin salinan, cuma kasih label baru ke array yang sama. Pakai[...a]ataua.slice()untuk salinan baru.
🎯 Tambah/hapus elemen — pilih method mana?
- Tambah di AKHIR →
arr.push(x)(mutate) atau[...arr, x](immutable)- Tambah di AWAL →
arr.unshift(x)(mutate) atau[x, ...arr](immutable)- Hapus AKHIR →
arr.pop()(mutate, return elemen)- Hapus AWAL →
arr.shift()(mutate, return elemen)- Hapus di INDEX tertentu →
arr.splice(i, 1)(mutate) atauarr.filter((_, idx) => idx !== i)(immutable)- Sambung dua array →
[...a, ...b]ataua.concat(b)(immutable)Aturan modern (React/Redux): AVOID mutate array yang dipake di state. Pakai spread (
[...arr, x]) atau method non-mutate (filter,map,concat,slice,toReversed(),toSorted()). Mutate bikin React gak detect change → re-render gak jalan.
TL;DR: Array = list ordered, akses pakai index 0-based (arr[0]). arr.length cek panjang. Method dasar: push/pop (akhir), unshift/shift (awal), slice (potong, gak mutate), splice (potong + insert, MUTATE), includes/indexOf (cari). Array di-pass by reference (b = a = alias, bukan copy). Untuk state React/Redux: HINDARI mutate, pakai spread ([...arr, x]) atau non-mutate method.