面试题答案
一键面试在CouchDB中,Reduce函数用于对Map函数生成的键值对进行汇总。以下是计算商品价格总和的Reduce函数代码:
function (keys, values, rereduce) {
if (rereduce) {
return values.reduce(function (sum, subSum) {
return sum + subSum;
}, 0);
} else {
return values.reduce(function (sum, price) {
return sum + price;
}, 0);
}
}
工作原理:
keys
:是Map函数输出的键数组,在计算总和时,我们不需要关心这些键。values
:是Map函数输出的对应于键的商品价格值数组。rereduce
:是一个布尔值,当为true
时,表示CouchDB正在进行二次归约(在分布式环境下,对各个分区的局部汇总结果再进行汇总)。
在第一次调用(rereduce
为false
)时,函数直接对values
数组中的价格进行累加,初始值设为0。
在二次归约(rereduce
为true
)时,values
数组中的元素是各个局部汇总结果,函数同样对这些局部汇总结果进行累加,最终得到所有商品价格的总和。