array.reduce( callback, initialValue )メソッドは、引数「callback」に指定した累積処理用のコールバック関数を使い、配列要素を左から右へ順に累積した結果を返すメソッド。累積開始時の初期値を、引数「initialValue」に指定できる。
構文
array.reduce( callback, initialValue )
引数
- callback
- 累積処理に使うコールバック関数を指定する。
- initialValue
- 累積開始時の初期値を指定できる。
- 省略可能。詳しくは、array.reduce( callback )へ。
戻り値
初期値と配列要素を左から右へ順に累積した結果。
コールバック関数の構文
function callback( previousValue, currentValue, currentIndex, array ) {
// 累積処理。
}
// 累積処理。
}
引数
- previousValue
- 累積開始時は、引数「initialValue」に指定した初期値。その後は、一つ前の処理までの累積結果。
- currentValue
- 現在処理中の配列要素。
- currentIndex
- 現在処理中の配列要素のインデックス。
- array
- 要素を格納している配列オブジェクト。
サンプル
配列の内容を合計
<script type="text/javascript">
function sumElements( $previousValue, $currentValue ) {
return $previousValue + $currentValue;
}
var $sampleArray = new Array( 1, 2, 3, 4, 5 );
var $sum = $sampleArray.reduce( sumElements, 100 );
document.write( $sum );
</script>
function sumElements( $previousValue, $currentValue ) {
return $previousValue + $currentValue;
}
var $sampleArray = new Array( 1, 2, 3, 4, 5 );
var $sum = $sampleArray.reduce( sumElements, 100 );
document.write( $sum );
</script>
↓↓↓出力結果↓↓↓
二次元配列を一次元配列にする
二次元配列を一次元配列にし、初期値に設定した配列に結合。
<script type="text/javascript">
function sampleFunc( $previousValue, $currentValue ) {
return $previousValue.concat( $currentValue );
}
var $sampleArrayA = [
[ "要素1-1", "要素1-2", "要素1-3" ],
[ "要素2-1", "要素2-2", "要素2-3" ],
[ "要素3-1", "要素3-2", "要素3-3" ]
];
var $sampleArrayB = $sampleArrayA.reduce( sampleFunc, [ "初期値配列要素1", "初期値配列要素2" ] );
for ( var $counterVar = 0; $counterVar < $sampleArrayB.length; $counterVar++ ) {
document.write( $sampleArrayB[$counterVar] );
document.write( '<br />' );
}
</script>
function sampleFunc( $previousValue, $currentValue ) {
return $previousValue.concat( $currentValue );
}
var $sampleArrayA = [
[ "要素1-1", "要素1-2", "要素1-3" ],
[ "要素2-1", "要素2-2", "要素2-3" ],
[ "要素3-1", "要素3-2", "要素3-3" ]
];
var $sampleArrayB = $sampleArrayA.reduce( sampleFunc, [ "初期値配列要素1", "初期値配列要素2" ] );
for ( var $counterVar = 0; $counterVar < $sampleArrayB.length; $counterVar++ ) {
document.write( $sampleArrayB[$counterVar] );
document.write( '<br />' );
}
</script>
↓↓↓出力結果↓↓↓