Hari 29: Mini Proyek — Data Pipeline
90 min
Last updated 09 Apr 2026
Data Pipeline dengan JavaScript Functional
// Utilitas pipeline
const pipe = (...fns) => data => fns.reduce((v, f) => f(v), data);
const map = fn => arr => arr.map(fn);
const filter = pred => arr => arr.filter(pred);
const reduce = (fn, init) => arr => arr.reduce(fn, init);
const sortBy = (key, desc = false) => arr =>
[...arr].sort((a, b) => desc ? b[key] - a[key] : a[key] - b[key]);
const take = n => arr => arr.slice(0, n);
// Dataset transaksi
const transaksi = [
{ tanggal: "2024-01", kategori: "Makanan", jumlah: 350000 },
{ tanggal: "2024-01", kategori: "Transport", jumlah: 180000 },
{ tanggal: "2024-02", kategori: "Makanan", jumlah: 420000 },
{ tanggal: "2024-02", kategori: "Elektronik", jumlah: 1500000 },
{ tanggal: "2024-02", kategori: "Transport", jumlah: 160000 },
{ tanggal: "2024-03", kategori: "Makanan", jumlah: 380000 },
{ tanggal: "2024-03", kategori: "Hiburan", jumlah: 200000 },
];
// Pipeline: filter Jan-Feb, group by kategori, hitung total, sort desc, top 3
const analisis = pipe(
filter(t => t.tanggal <= "2024-02"),
reduce((acc, t) => {
acc[t.kategori] = (acc[t.kategori] || 0) + t.jumlah;
return acc;
}, {}),
)(transaksi);
Object.entries(analisis)
.sort(([,a], [,b]) => b - a)
.forEach(([kat, total]) =>
console.log(`${kat}: Rp ${total.toLocaleString()}`)
);
💡
Notice: reduce() sangat powerful untuk grouping. Object.entries() mengubah object menjadi [key,value] pairs untuk di-sort dan di-iterate.
Assignment
Implementasi pipeline analisis data: dari array transaksi, hitung total per kategori untuk SEMUA bulan, urutkan descending, tampilkan top 3.
Expected output:
Elektronik: Rp 1,500,000
Makanan: Rp 1,150,000
Transport: Rp 180,000
JS
script.js
Solution
Output