menengaharraymethodMenengah3 mnt baca

Array Method: reduce, find, some, dan every

Method array lanjutan: reduce untuk agregasi, find untuk pencarian, some/every untuk pengecekan.

Melampaui map dan filter

Setelah map dan filter, ada method untuk kebutuhan spesifik: menggabungkan semua item jadi satu nilai (reduce), mencari satu item (find), dan mengecek kondisi (some/every).

reduce: rangkum jadi satu nilai

reduce "melipat" array menjadi satu nilai: total, rata-rata, object gabungan, apa pun. Ia punya accumulator yang membawa hasil sementara:

javascript
let angka = [1, 2, 3, 4, 5];
let total = angka.reduce((acc, n) => acc + n, 0);
console.log(total); // 15
// acc: 0 -> 1 -> 3 -> 6 -> 10 -> 15

Angka 0 di akhir adalah nilai awal accumulator. Contoh nyata: menghitung total belanja:

javascript
let keranjang = [
  { nama: "Kopi", harga: 15000 },
  { nama: "Roti", harga: 8000 }
];
let totalBayar = keranjang.reduce((acc, item) => acc + item.harga, 0);
console.log(totalBayar); // 23000

find dan findIndex: cari satu item

javascript
let siswa = [
  { nama: "Rizky", nilai: 85 },
  { nama: "Sinta", nilai: 60 }
];
let ketemu = siswa.find(s => s.nilai < 70);
console.log(ketemu.nama); // "Sinta"

find mengembalikan item pertama yang cocok (atau undefined kalau tidak ada). findIndex mengembalikan indexnya. Beda dengan filter yang mengembalikan array berisi semua yang cocok.

some dan every: cek kondisi

javascript
let nilai = [80, 90, 55];
console.log(nilai.some(n => n < 60));  // true, ada yang di bawah 60
console.log(nilai.every(n => n >= 60)); // false, tidak semua di atas 60

some = "apakah ada minimal satu?", every = "apakah semuanya?". Keduanya berhenti lebih awal begitu jawabannya pasti, jadi efisien.

Catatan teknis: reduce tanpa nilai awal memakai item pertama sebagai accumulator. Ini error kalau array kosong. Selalu berikan nilai awal kecuali kamu yakin array tidak pernah kosong.

reduce untuk grouping

reduce bisa membangun object, misalnya mengelompokkan siswa berdasarkan status kelulusan:

javascript
let siswa = [
  { nama: "Rizky", nilai: 85 },
  { nama: "Sinta", nilai: 60 },
  { nama: "Budi", nilai: 90 }
];

let kelompok = siswa.reduce((acc, s) => {
  let status = s.nilai >= 75 ? "lulus" : "remidi";
  if (!acc[status]) acc[status] = [];
  acc[status].push(s.nama);
  return acc;
}, {});

console.log(kelompok);
// { lulus: ["Rizky", "Budi"], remidi: ["Sinta"] }

Accumulator di sini berupa object, bukan angka. Ini menunjukkan fleksibilitas reduce: ia bisa membangun struktur data apapun dari array. Kalau polanya terasa rumit, tidak apa-apa, reduce memang method yang butuh latihan lebih banyak.

Kesimpulan

Lengkapi kotak alat array-mu: map/filter untuk transformasi dan seleksi, reduce untuk agregasi, find untuk pencarian, some/every untuk pengecekan. Kombinasi mereka menangani hampir semua pengolahan data.