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:
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 -> 15Angka 0 di akhir adalah nilai awal accumulator. Contoh nyata: menghitung total belanja:
let keranjang = [
{ nama: "Kopi", harga: 15000 },
{ nama: "Roti", harga: 8000 }
];
let totalBayar = keranjang.reduce((acc, item) => acc + item.harga, 0);
console.log(totalBayar); // 23000find dan findIndex: cari satu item
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
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 60some = "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:
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.