01 / 05
全部をまとめて1つにしたい
配列の要素を全部たして合計を出すとき、これまではループの外に let total = 0; を用意して、1つずつ足してきたよね。
「全部を足しあげる」「1つの結果にまとめる」という操作はとてもよく出てくる。それを1行で書くための道具が reduce(畳み込む)だよ。
配列をあつかう道具
INPUT · スライド
01 / 05
配列の要素を全部たして合計を出すとき、これまではループの外に let total = 0; を用意して、1つずつ足してきたよね。
「全部を足しあげる」「1つの結果にまとめる」という操作はとてもよく出てくる。それを1行で書くための道具が reduce(畳み込む)だよ。
02 / 05
reduce に渡す関数は、引数を2つ受け取る。
1つめがこれまでの合計(ためてきた値)で、2つめがいま見ている要素だ。関数の中で「新しい合計」を返すと、それが次の周の1つめの引数に引き継がれていくよ。
const nums = [1, 2, 3];const add = (total, n) => { return total + n;};console.log(nums.reduce(add, 0));実行結果
6
03 / 05
nums.reduce(add, 0) が中でどう動いているか見てみよう。
total は 0、n は 1 → 0 + 1 = 1 を返すtotal は 1、n は 2 → 1 + 2 = 3 を返すtotal は 3、n は 3 → 3 + 3 = 6 を返す最後の計算結果が、reduce 全体の戻り値になるんだ。
04 / 05
商品一覧の合計金額を出すときにも大活躍する。
初期値を 0 にしておいて、total + item.price を返していけば、何十件の商品があっても1行で合計金額が求まるよ。
const items = [ { name: "ペン", price: 100 }, { name: "ノート", price: 200 },];const sumPrice = (total, item) => { return total + item.price;};console.log(items.reduce(sumPrice, 0));実行結果
300
05 / 05
ここまでを整理しておこう。
配列.reduce(関数, 初期値) で1つの値にまとめる(これまでの値, いまの要素) => 次の値 の形それじゃあ、実際にまとめてみよう。