global.Array インスタンス
instance
.aggregate(
stateFunc,
finalFunc,
initialCond,
* )
配列要素を集約し、その結果を取得します。 集約方法は 状態遷移関数と 最終計算関数に依存します。
当該コンテキスト(thisオブジェクト)は変更されません。
この関数は、内部状態値を一時変数として保持します。 状態遷移関数と最終計算関数は、内部状態値と配列の各要素から、集約結果を算出します。 配列の各要素は、先頭から順に状態遷移関数によって処理されます。 全要素が処理された後、最終計算関数によって集約結果が決定されます。 この関数の処理イメージは以下のようになります。
stateFunc( initial-condition, first-data-item ) ---> next-internal-state stateFunc( internal-state, next-data-item ) ---> next-internal-state stateFunc( internal-state, next-data-item ) ---> next-internal-state ... stateFunc( internal-state, last-data-item ) ---> next-internal-state finalFunc( internal-state ) ---> aggregate-value
集約結果を返します。 最終計算関数の戻り値が集約結果となります。 最終計算関数が指定されなかった(voidが指定された)場合には、全要素に対する 状態遷移関数実行後の最終内部状態値が集約結果となります。
var arr = [ 2, 5, 1, 2, 1, 3 ]; // 要素ごとにインクリメントする状態遷移関数 var sfunc_cnt = function(internalState) { return internalState + 1; }; // 要素数を返す集約関数(arr.countと同じ) var count = arr.aggregate(sfunc_cnt, void, 0);
// 小さいほうを返す状態遷移関数 var sfunc_min = function(internalState, value) { return (internalState < value) ? internalState : value; }; // 最小値を返す集約関数 var minimum = arr.aggregate(sfunc_min, void, arr[0]);
// 和を返す状態遷移関数 var sfunc_sum = function(internalState, value) { return internalState + value; }; // 平均値を返す最終計算関数 var ffunc_avg = function(internalState) { //この関数は、Arrayインスタンスメソッドのコンテキストで実行されるので、 //Arrayインスタンスのcountプロパティを参照することができる。 return (count > 0) ? (internalState / count) : void; }; // 総和を返す集約関数 var summary = arr.aggregate(sfunc_sum, void, 0); // 平均値を返す集約関数 var average = arr.aggregate(sfunc_sum, ffunc_avg, 0);
// 差の二乗和を返す状態遷移関数 var sfunc_2diff = function(internalState, value, avg) { var s = value - avg; return internalState + s * s; }; // 分散を返す集約関数 var variance = arr.aggregate(sfunc_2diff, ffunc_avg, 0, average);