JavaScript | filter と reduce と組み合わせて集計処理を学ぶ

JavaScript JavaScript
スポンサーリンク

filterreduce を組み合わせると、「条件で絞り込み → 集計」という流れをシンプルに書けます。実務でもよく使うパターンなので、例題を交えて説明します。


基本の流れ

  1. filter: 配列から条件に合う要素だけを残す
  2. reduce: 残った要素を合計・平均・最大などにまとめる

例題 1: 70点以上の合計点を出す

let scores = [48, 75, 92, 61, 54, 83, 76];

// 70点以上だけを残す
let passed = scores.filter(score => score >= 70);

// 合計を出す
let total = passed.reduce((sum, n) => sum + n, 0);

console.log(passed); // [75, 92, 83, 76]
console.log(total);  // 326
JavaScript
  • filter[75, 92, 83, 76] に絞り込み
  • reduce で合計 326 を計算

例題 2: オブジェクト配列から「合格者の平均点」

let users = [
  { name: 'Yamada', score: 75 },
  { name: 'Suzuki', score: 91 },
  { name: 'Kudou',  score: 65 },
  { name: 'Tanaka', score: 82 }
];

// 70点以上の人だけ残す
let passed = users.filter(user => user.score >= 70);

// 合計点を出す
let total = passed.reduce((sum, user) => sum + user.score, 0);

// 平均点
let average = total / passed.length;

console.log(passed.map(u => u.name)); // ["Yamada", "Suzuki", "Tanaka"]
console.log(average); // 82.67
JavaScript

例題 3: 条件付きで最大値を求める

「80点以上の人の中で最高点を探す」

let users = [
  { name: 'Yamada', score: 75 },
  { name: 'Suzuki', score: 91 },
  { name: 'Kudou',  score: 65 },
  { name: 'Tanaka', score: 82 }
];

let maxScore = users
  .filter(user => user.score >= 80)
  .reduce((max, user) => user.score > max ? user.score : max, -Infinity);

console.log(maxScore); // 91
JavaScript

ポイント

  • filter → reduce の順番が基本
  • filter で条件を満たす要素が 0 件の場合、reduce の初期値がそのまま返るので注意
    • 合計なら 0
    • 最大値なら -Infinity
    • 最小値なら Infinity

まとめ

  • filter で「対象を絞る」
  • reduce で「まとめる」
  • 合計・平均・最大・最小など、いろんな集計に応用できる

タイトルとURLをコピーしました