Studi Kasus: Daftar Nilai Siswa
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah studi kasus ini, kamu dapat menerapkan array dan method array untuk menghitung total, rata-rata, nilai tertinggi, nilai terendah, serta menyaring data nilai secara sistematis.
Pendahuluan
Section titled “Pendahuluan”Kita akan membuat sistem pengolah nilai sederhana yang mensimulasikan tugas seorang guru. Program menerima daftar nilai, menganalisis data, dan menampilkan laporan statistik kelas secara otomatis.
Perancangan Program
Section titled “Perancangan Program”Data yang akan diolah:
- Array berisi objek siswa (nama dan nilai)
Operasi yang dibutuhkan:
- Menghitung rata-rata kelas (
reduce()) - Mencari siswa nilai tertinggi (
for...of/reduce()) - Mencari siswa nilai terendah
- Menyaring siswa yang lulus nilai >= 75 (
filter()) - Mengurutkan nilai dari terbesar ke terkecil (
sort())
Visual Illustration
Section titled “Visual Illustration”Daftar Siswa (Array of Objects) │ ├─► hitung rata-rata ──► reduce() ├─► cari siswa terbaik ──► loop perbandingan ├─► saring lulus ──► filter() └─► urutkan peringkat ──► sort()Mari Mencoba
Section titled “Mari Mencoba”Buat src/bab5/studi-kasus-nilai.ts:
type Siswa = { nama: string; nilai: number }
const kelasRPL: Siswa[] = [ { nama: "Andi", nilai: 80 }, { nama: "Budi", nilai: 65 }, { nama: "Citra", nilai: 95 }, { nama: "Dian", nilai: 70 }, { nama: "Eko", nilai: 88 }, { nama: "Fira", nilai: 60 },]
console.log("=".repeat(45))console.log(" LAPORAN STATISTIK KELAS RPL")console.log("=".repeat(45))
// 1. Menghitung Rata-rata Kelasconst totalNilai = kelasRPL.reduce((acc, curr) => acc + curr.nilai, 0)const rataRata = totalNilai / kelasRPL.lengthconsole.log(`Rata-rata Kelas : ${rataRata.toFixed(2)}`)
// 2. Mencari Nilai Tertinggi & Terendahlet siswaTerbaik = kelasRPL[0]let siswaTerendah = kelasRPL[0]
for (const siswa of kelasRPL) { if (siswa.nilai > siswaTerbaik.nilai) { siswaTerbaik = siswa } if (siswa.nilai < siswaTerendah.nilai) { siswaTerendah = siswa }}console.log(`Nilai Tertinggi : ${siswaTerbaik.nilai} (${siswaTerbaik.nama})`)console.log(`Nilai Terendah : ${siswaTerendah.nilai} (${siswaTerendah.nama})`)
// 3. Menyaring Siswa Lulus (nilai >= 75)const siswaLulus = kelasRPL.filter((s) => s.nilai >= 75)console.log(`Siswa Lulus : ${siswaLulus.length} dari ${kelasRPL.length} siswa`)
// 4. Mengurutkan Peringkat (Descending)const peringkat = kelasRPL.slice().sort((a, b) => b.nilai - a.nilai)
console.log("\n=== DAFTAR PERINGKAT KELAS ===")peringkat.forEach((siswa, indeks) => { const status = siswa.nilai >= 75 ? "Lulus" : "Remedial" console.log(`${indeks + 1}. ${siswa.nama.padEnd(8)}: ${siswa.nilai} [${status}]`)})console.log("=".repeat(45))Jalankan:
tsx src/bab5/studi-kasus-nilai.tsOutput
Section titled “Output”============================================= LAPORAN STATISTIK KELAS RPL=============================================Rata-rata Kelas : 76.33Nilai Tertinggi : 95 (Citra)Nilai Terendah : 60 (Fira)Siswa Lulus : 3 dari 6 siswa
=== DAFTAR PERINGKAT KELAS ===1. Citra : 95 [Lulus]2. Eko : 88 [Lulus]3. Andi : 80 [Lulus]4. Dian : 70 [Remedial]5. Budi : 65 [Remedial]6. Fira : 60 [Remedial]=============================================Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”kelasRPL.reduce((acc, curr) => acc + curr.nilai, 0)— mereduksi array objek menjadi angka total nilai.- Loop
for...ofmembandingkan nilai objek satu per satu untuk mencari siswa terbaik dan terendah. kelasRPL.filter(...)— menghasilkan array baru yang hanya berisi siswa lulus.kelasRPL.slice().sort(...)— menyalin array terlebih dahulu menggunakanslice(), lalu mengurutkannya berdasarkan propertinilaidari besar ke kecil (b.nilai - a.nilai)..forEach(...)— menampilkan peringkat dengan nomor urut rapi.
Kesalahan yang Sering Terjadi
Section titled “Kesalahan yang Sering Terjadi”// Salah: mengubah array asli secara tidak sengajaconst peringkat = kelasRPL.sort((a, b) => b.nilai - a.nilai)// Data awal di kelasRPL sekarang juga ikut terurut!Perbaikan: Selalu gunakan .slice().sort(...) jika data awal harus tetap berada di urutan semulanya.
Latihan
Section titled “Latihan”Kembangkan program di atas:
- Hitung persentase kelulusan kelas.
- Tampilkan hanya daftar nama siswa yang remedial (nilai < 75).
Ringkasan
Section titled “Ringkasan”- Pengolahan data kelompok membutuhkan kombinasi berbagai method array.
- Gunakan
reduce()untuk akumulasi nilai angka. - Gunakan
filter()untuk penyaringan data. - Gunakan
.slice().sort()untuk mengurutkan peringkat tanpa merusak data asli.