Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

JavaScript辞典

配列.reduce()対応: ES5(ECMAScript 2009)

配列のすべての要素を順番に処理し、1つの値にまとめるメソッドです。合計値の計算やオブジェクトへの変換など、幅広い用途に使えます。

構文
// 左から右へ処理します。
var result = 配列.reduce(function(累積値, 現在の要素, インデックス, 配列) {
	return 次の累積値;
}, 初期値);

// 右から左へ処理します。
var result = 配列.reduceRight(function(累積値, 現在の要素, インデックス, 配列) {
	return 次の累積値;
}, 初期値);
メソッド一覧
メソッド概要
reduce(関数, 初期値)配列の先頭から末尾に向かって要素を順番に処理し、1つの値にまとめます。
reduceRight(関数, 初期値)配列の末尾から先頭に向かって要素を順番に処理し、1つの値にまとめます。
サンプルコード
var numbers = [1, 2, 3, 4, 5];

// 合計値を計算します。
var sum = numbers.reduce(function(total, num) {
	return total + num;
}, 0);
console.log(sum); // 『15』と出力されます。

// 最大値を求めます。
var max = numbers.reduce(function(biggest, num) {
	return num > biggest ? num : biggest;
}, numbers[0]);
console.log(max); // 『5』と出力されます。

// 配列をオブジェクトに変換します。
var fruits = ["りんご", "みかん", "ぶどう"];
var obj = fruits.reduce(function(acc, fruit, index) {
	acc[index] = fruit;
	return acc;
}, {});
console.log(obj); // 『{0: "りんご", 1: "みかん", 2: "ぶどう"}』と出力されます。

// reduceRightで右から左へ文字列を結合します。
var words = ["JavaScript", "で", "学ぶ"];
var reversed = words.reduceRight(function(str, word) {
	return str + word;
}, "");
console.log(reversed); // 『学ぶでJavaScript』と出力されます。
実行結果
15                                        // 合計値
5                                         // 最大値
{0: "りんご", 1: "みかん", 2: "ぶどう"}   // オブジェクトへの変換
"学ぶでJavaScript"                        // reduceRightの結果
概要

『配列.reduce()』はコールバック関数の第1引数に前回の処理結果(累積値)が渡され、第2引数に現在の要素が渡されます。関数の戻り値が次の繰り返しの累積値として使われ、最後の繰り返しの戻り値が『配列.reduce()』全体の結果になります。

第2引数の初期値は省略可能ですが、省略すると配列の最初の要素が初期値として使われ、2番目の要素からループが始まります。空の配列に対して初期値なしで呼び出すとエラーになるため、初期値は常に指定することをおすすめします。

『配列.reduceRight()』は処理の方向が逆になるだけで、動作の仕組みは『配列.reduce()』と同じです。文字列の結合やネストされたデータの展開など、末尾から処理したい場合に使用します。単純な合計や平均の計算には『配列.reduce()』が最も適していますが、配列の変換やフィルタリングが目的の場合は『配列.map()』や『配列.filter()』の方がコードの意図が明確になります。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。