たとえば、これは行の合計と長さを返す関数です。
function(key, values, rereduce) {
var result = {total: 0, count: 0};
for(i=0; i < values.length; i++) {
if(rereduce) {
result.total = result.total + values[i].total;
result.count = result.count + values[i].count;
} else {
result.total = sum(values);
result.count = values.length;
}
}
return(result);
}
定義する必要があるようです:
- すべての要素を削減する方法。
- 部分還元をグループ化する方法 (??)
なぜこれはとても奇妙ですか?従来のアプローチは、次のように簡単に説明できます。
reduce = {
op: function(accumulated,val){
return {total:accumulated.total + val, count:accumulated.count++};
},
initial: {total:0, count:0}
}
配列全体を削減し、新しい値に更新するのに十分な情報を保持しています...!