JavaScript入門 練習問題 27:配列メソッド:reduceによる集計処理
次のコードを実行したときのコンソールへの出力として正しいものはどれですか?
```javascript
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum);
```
- 10(1+2+3+4の合計)
- 0(reduceの初期値のまま変わらない)
- 24(1×2×3×4の積として計算される)
- [1, 2, 3, 4](配列がそのまま返される)
- 4(配列の要素数が返される)
Qraftユーザーの成績:難易度 Dランク(レーティング1124)・正答率 73%(8/11回正解)
レーティングは解いた人の実力と正誤から算出する難しさ(初期値1200)。ランクはその全問題中の順位(S+が最難関、F-が最易)
正解と解説を見る
reduceメソッドは配列の各要素を順に処理し、蓄積した値(アキュムレータ)を返します。ここでは初期値0から始めて各要素を足し合わせるため、最終結果は1+2+3+4=10になります。
【正解の理由】
reduceの第1引数のコールバック関数「(acc, cur) => acc + cur」は、蓄積値accに現在の要素curを加算する処理を各要素に対して繰り返します。初期値0から始まり、最終的にすべての要素の合計である10が返されます。
【不正解の理由】
• 「0(reduceの初期値のまま変わらない)」:初期値は最初のaccの値として使われるだけで、コールバック内で加算処理が行われるため値は更新される
• 「24(1×2×3×4の積として計算される)」:コールバック関数は掛け算ではなく足し算(acc + cur)を行っているため、積にはならない
• 「[1, 2, 3, 4](配列がそのまま返される)」:reduceは配列をそのまま返すのではなく、コールバックの処理結果を1つの値に集約する
• 「4(配列の要素数が返される)」:要素数を返すのはlengthプロパティの役割であり、reduceは指定した計算処理の結果を返す