今天,我的映射函数开始报告断言失败13076"递归toObject"代码。昨天一切都很好。
这是我的地图功能:
function () {
for(i=0; i<this.values.length; i++) {
emit(this.values[i].id, {
'id': this.values[i].id,
'start_date': this.values[i].start_date,
'end_date': this.values[i].end_date,
'hash': this.values[i].hash,
'url': this.values[i].url});
}
}
我试着用forEach函数替换for循环,但结果是一样的。
有什么有趣的函数,范围可变,将映射函数限制为单次发射,效果很好:
function () {
for(i=0; i<this.values.length; i++) {
if(this.values[i].id == myId) {
emit(this.values[i].id, {
'id': this.values[i].id,
'start_date': this.values[i].start_date,
'end_date': this.values[i].end_date,
'hash': this.values[i].hash,
'url': this.values[i].url});
}
}
}
当然,我可以直接在代码中执行这个映射,但我不想在其他真正需要使用MapReduce的时候遇到这个错误。
好的,所以错误消息确实很模糊,但问题似乎是由'values'数组中'id'字段的重复值引起的。当我更改其中一个数组元素中的id时,函数又开始工作了。