Materi
reduce tidak hanya menghasilkan angka. Bila nilai awalnya objek kosong {}, penampungnya bisa diisi satu kunci per kelompok: jumlah pelanggan per kota, total penjualan per kategori, atau daftar nama per divisi. Setiap putaran membaca atau membuat kuncinya, memperbarui nilainya, lalu wajib mengembalikan penampung itu untuk putaran berikutnya. Object.entries mengubah objek hasilnya menjadi array pasangan [kunci, nilai] yang bisa diurutkan atau dipetakan lagi.
const tiket = ["teknis", "tagihan", "teknis", "akun", "teknis"];
const perJenis = tiket.reduce((hitung, jenis) => {
hitung[jenis] = (hitung[jenis] || 0) + 1;
return hitung;
}, {});
// { teknis: 3, tagihan: 1, akun: 1 }
Object.entries(perJenis); // [["teknis", 3], ["tagihan", 1], ["akun", 1]]Data sering datang bersarang: setiap pesanan memuat array barang, setiap kelas memuat array siswa. flat membuka satu tingkat sarang, sehingga [[1, 2], [3]].flat() menjadi [1, 2, 3]. flatMap menjalankan fungsi seperti map lalu membuka hasilnya satu tingkat. Dengan flatMap, pertanyaan seperti barang apa saja yang pernah dipesan dijawab dalam satu langkah. Fungsi yang mengembalikan [] untuk suatu isi membuat isi itu hilang dari hasil, sehingga flatMap juga bisa menyaring dan memetakan sekaligus.
const kelas = [
{ nama: "X-1", siswa: ["Ari", "Bayu"] },
{ nama: "X-2", siswa: ["Cici"] },
];
kelas.map((k) => k.siswa); // [["Ari", "Bayu"], ["Cici"]]
kelas.flatMap((k) => k.siswa); // ["Ari", "Bayu", "Cici"]