💡
reduceとMapを使って配列から条件別に集計する
フロントエンドでもバックエンドでも以下のようなresultを取得して、条件に応じた集計を行うことはしばしばある事だと思う。reduceで単に合計を取る例は多く存在するが、各要素の条件ごとに集計を取るうまいやり方は無いかググったけど見当たらず。その際、自分で色々工夫して書いた時の覚書。
reduceとMapを組み合わせると簡潔にそれが行う事ができる。
const result = [
{ category: "x", count: 10 },
{ category: "x", count: 10 },
{ category: "y", count: 10 },
{ category: "x", count: 10 },
{ category: "z", count: 10 },
{ category: "y", count: 10 }
];
const sum = result.reduce((accum, current) => {
accum.set(current.category, (accum.get(current.category) ?? 0) + current.count);
return accum;
}, new Map());
console.log(sum);
/* 結果は以下の通り
Map {}
x: 30
y: 20
z: 10
*/
Discussion