Lewati ke konten

Error Corner BAB 5

Setelah halaman ini, kamu dapat mengidentifikasi bug umum manipulasi array dan mengatasinya dengan benar.


Kesalahan array sering kali tidak memicu error compiler di TypeScript, tetapi menghasilkan error saat program dijalankan (runtime error) atau menghasilkan data yang tidak konsisten secara logika.


Error 1 — Indeks Diluar Jangkauan (Undefined)

Section titled “Error 1 — Indeks Diluar Jangkauan (Undefined)”
📄 TypeScript
const siswa = ["Andi", "Budi"]
console.log(siswa[2].toUpperCase()) // Runtime Error!

siswa[2] bernilai undefined karena indeks maksimal adalah 1 (panjang 2). Mengakses properti .toUpperCase() pada undefined memicu crash program.

Selalu cek keberadaan elemen sebelum memprosesnya:

📄 TypeScript
const siswa = ["Andi", "Budi"]
if (siswa[2] !== undefined) {
console.log(siswa[2].toUpperCase())
}

Error 2 — Mengira push() / unshift() Mengembalikan Array Baru

Section titled “Error 2 — Mengira push() / unshift() Mengembalikan Array Baru”
📄 TypeScript
const buah = ["Apel"]
const keranjangBaru = buah.push("Mangga")
console.log(keranjangBaru) // Output: 2 (angka panjang array!)

Method push() dan unshift() memodifikasi array asli dan hanya mengembalikan angka panjang baru array, bukan array hasil modifikasi.

📄 TypeScript
const buah = ["Apel"]
buah.push("Mangga")
console.log(buah) // [ 'Apel', 'Mangga' ]

Error 3 — Mengubah Array Asli Secara Tidak Sengaja (Mutation)

Section titled “Error 3 — Mengubah Array Asli Secara Tidak Sengaja (Mutation)”
📄 TypeScript
const daftarAsli = ["Citra", "Andi", "Budi"]
const daftarUrut = daftarAsli.sort()
console.log(daftarAsli) // Output: [ 'Andi', 'Budi', 'Citra' ] (ikut terurut!)

Method .sort(), .reverse(), dan .splice() adalah method mutable yang mengubah data pada array aslinya secara langsung.

Salin dahulu menggunakan .slice() sebelum mengurutkan:

📄 TypeScript
const daftarAsli = ["Citra", "Andi", "Budi"]
const daftarUrut = daftarAsli.slice().sort()

Error 4 — Salah Parameter pada slice() vs splice()

Section titled “Error 4 — Salah Parameter pada slice() vs splice()”
  • slice(mulai, akhir) — memotong (menyalin) tanpa merusak array asli. Parameter ke-2 adalah indeks pembatas akhir (tidak termasuk hasil).
  • splice(mulai, jumlahHapus) — memotong dan membuang dari array asli. Parameter ke-2 adalah jumlah elemen yang dihapus.
📄 TypeScript
const data = ["A", "B", "C", "D"]
// Ingin mengambil B dan C (indeks 1 & 2)
const hasil = data.slice(1, 2)
console.log(hasil) // ["B"] (salah!)
📄 TypeScript
const hasil = data.slice(1, 3) // index 1 sampai sebelum 3 (yaitu 1 & 2)

Error 5 — Mengurutkan Angka Tanpa Compare Function

Section titled “Error 5 — Mengurutkan Angka Tanpa Compare Function”
📄 TypeScript
const nilai = [10, 2, 30, 5]
nilai.sort()
console.log(nilai) // [10, 2, 30, 5] (salah!)

Secara default, .sort() mengonversi angka menjadi string sehingga "10" dianggap lebih kecil daripada "2" secara urutan abjad.

Selalu berikan compare function saat mengurutkan angka:

📄 TypeScript
nilai.sort((a, b) => a - b) // [2, 5, 10, 30]

Perbaiki semua kesalahan dalam kode berikut agar berjalan normal:

📄 TypeScript
const daftarSiswa = ["Andi", "Budi"]
console.log(daftarSiswa[10].trim())
const keranjang: string[] = []
const hasilTambah = keranjang.push("Buku")
const nilaiUjian = [90, 80, 100]
nilaiUjian.sort()
console.log(nilaiUjian)

  • Mengakses indeks yang tidak ada menghasilkan undefined.
  • push() dan unshift() mengembalikan nilai number panjang array baru.
  • sort(), reverse(), dan splice() mengubah array asli.
  • Selalu salin array dengan .slice() jika ingin melindungi data asli.
  • Pengurutan angka wajib menggunakan (a, b) => a - b.