That looks almost exactly like what I was going to suggest.
It should look something like....
function init() {
return {
count:0,
correct:0,
correctPercent:0,
failPercent:1
}
}
function add(p, v) {
p.count = p.count + 1;
p.correct = p.correct + (v.result =='Correct')?1:0
p.correctPercent = p.count ? p.correct/p.count : 0;
p.failPercent = 1 - p.correctPercent;
return p;
}
function remove(p, v) {
p.count = p.count - 1;
p.correct = p.correct - (v.result =='Correct')?1:0
p.correctPercent = p.count ? p.correct/p.count : 0;
p.failPercent = 1 - p.correctPercent;
return p;
}
dim.group().reduce(add,remove,init)