【りでゅーすかんすう】
reduce関数 とは?
最終更新:
💡 途中の結果を受け渡し、要素を一つの結果へまとめる
複数の要素に対して、途中の結果を次の処理へ渡しながら一つの結果を作る関数。JavaScriptの配列では、設定されている要素を添字の小さい順に処理する。
📌 このページのポイント
- コールバックの戻り値が、次の処理の累積値になる
- 合計だけでなく、オブジェクトや配列も結果にできる
- JavaScriptでは初期値がないと、最初の存在する要素を累積値にする
- 空配列・未設定要素・大きなデータでのコピーに注意する
reduceって、どうやってまとめるの?
JavaScriptでは、累積値と今の要素をコールバックへ渡すよ。その戻り値を次の累積値にして進むんだ。たとえば [1,2,3,4].reduce((sum,n)=>sum+n,0) は、0→1→3→6→10と足し、最後に10を返すよ。
mapやfilterとは違うの?
最初の0を省いたらどうなる?
配列の全ての場所を処理するの?
JavaScriptでは、要素が設定されていない場所は飛ばすよ。値としてundefinedが入っている場所は処理するので、両者は別なんだ。たとえば [1,,3] は真ん中が未設定。添字が小さい順に、存在する要素を使って進めるよ。
reduceなら速いの?
JavaScript以外でもある?
Pythonにはfunctools.reduceがあり、反復できるデータへ左から累積処理を行うよ。たとえばreduce(lambda a,b:a+b,[1,2,3],0)は6になる。同じ名前でも言語の仕様は別なので、処理順や初期値のルールは使う言語の資料で確認しよう。
まとめ:ざっくりこれだけ覚えればOK!
「reduce関数」って出てきたら「途中の結果を次へ渡しながら、要素を一つの結果にまとめる関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「reduce」 = 減らす・縮める
💬 Reduceは減らすという意味。複数の要素を、一つの累積結果へまとめていくイメージだよ。