配列を一つの値に集約する。集計・変換に多用される
// ── 基本: 合計を計算 ─────────────────────────────────
const nums = [1, 2, 3, 4, 5];
// acc = 累積値(アキュムレータ), cur = 現在の要素
const sum = nums.reduce((acc, cur) => acc + cur, 0);
// 実行の流れ: 0→1→3→6→10→15
console.log(sum); // 15
// ── カウント集計 ────────────────────────────────────
const fruits = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple'];
const count = fruits.reduce((acc, fruit) => {
// すでにキーがあれば +1、なければ初期値1を設定
acc[fruit] = (acc[fruit] || 0) + 1;
return acc;
}, {} as Record<string, number>);
// { apple: 3, banana: 2, cherry: 1 }
// ── 配列を特定のキーでグループ化 ───────────────────
const people = [
{ name: '田中', dept: '開発' },
{ name: '鈴木', dept: '営業' },
{ name: '佐藤', dept: '開発' },
];
const byDept = people.reduce((acc, p) => {
if (!acc[p.dept]) acc[p.dept] = []; // グループ未作成なら初期化
acc[p.dept].push(p);
return acc;
}, {} as Record<string, typeof people>);
// { '開発': [{田中}, {佐藤}], '営業': [{鈴木}] }reduce()は配列を一つの値に集約するメソッドです。合計・最大値・オブジェクトへの変換・グルーピングなど幅広い用途があります。初期値を省略すると空配列でTypeErrorになるため、常に初期値を指定するのが安全です。TypeScriptでは初期値に型アノテーションをつけることで型推論が正確になります。
array.reduce(callbackFn(accumulator, currentValue, index?, array?) => result, initialValue)
accumulatorT前回のコールバック戻り値(初回は initialValue)currentValueT現在処理中の要素initialValueT初期値(省略すると最初の要素が使われる)最後のコールバック呼び出しの戻り値(単一の値)
初期値(第2引数)を必ず指定すると空配列でも安全。TypeScriptでは初期値に型アノテーションをつける。