reduceメソッド

メソッド reduce は、配列を1つの値に畳み込みます(リデュースします)。例えば、このメソッドを使えば配列要素の合計を簡単に見つけることができます(つまり、配列は1つの値 - 要素の合計 - に集約されます)。

メソッド reduce の最初のパラメータは、配列の最初の要素から始めて各要素に対して順次実行される関数です。この関数には 4 つのパラメータを渡すことができます。これらのパラメータがある場合(必須ではありません)、最初のパラメータには自動的に 中間結果 が入り、2番目には配列の要素、3番目にはその番号(インデックス)、4番目には配列自体が入ります。

中間結果とは、メソッド reduce がすべての配列要素を走査し終えたときに返す値を蓄積する変数です。例えば、ここには配列要素の合計を順次蓄積できます:最初に最初の要素を入れ、次のループでは最初と2番目の要素の合計、その次のループでは1番目、2番目、3番目の合計、というように、配列が終わるまで続けます。 reduce が受け取る関数は、新しい中間結果の値を返す必要があります。

メソッド reduce の2番目のパラメータには、中間結果の初期値を指定します。指定しない場合、初期値は配列の最初の要素と等しくなり、要素の処理は2番目の要素から始まります。

構文

javascript配列.reduce(function(中間結果, 要素, インデックス, 配列) {
  return 新しい中間結果;
}, 初期値);

例

配列要素の合計を求めましょう:

javascriptlet arr = [1, 2, 3, 4, 5, 6];

let res = arr.reduce(function(sum, elem) {
  return sum + elem;
}, 0);

console.log(res);

コード実行結果:

javascript21

例

配列内のすべての正の数の合計を求めてみましょう:

javascriptlet arr = [1, -2, -3, 4, 5, -6];

let res = arr.reduce(function(sum, elem) {
  if (elem >= 0) {
    return sum + elem;
  } else {
    return sum;
  }
}, 0);

console.log(res);

コード実行結果:

javascript10

関連項目

  • メソッド reduceRight,
    同様の操作を実行します
  • メソッド filter,
    配列要素をフィルタリングできます
  • メソッド map と forEach,
    各配列要素に関数を適用できます
  • メソッド some と every,
    配列のチェックを実行します