例如,这是一个返回行的总和和长度的函数:
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}
}
其中包含足够的信息来减少整个数组并更新它以获得新值......!