incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Sante <tom.sa...@gmail.com>
Subject Re: Reduce function results
Date Fri, 21 May 2010 08:21:35 GMT
Ok the log() helped to narrow things down:
res[v_n]={'mi':v,'ma':v,'c':1,'t':v};
in this context v isn't returned as a Number but as a {}
In number context, like in a Math.min(v,othernumber); it works fine.
Same thing happens with log:
log(v) returns {}
log(''+v) returns -0.453

Any reason why this would be the case since this is not the behaviour of 
a Number in normal js (JavaScript-C 1.7.0 2007-10-03) ?

I worked around it by forcing v to become a string here
res[v_n]={'mi':''+v,'ma':''+v,'c':1,'t':''+v};
But when i later do a sum like res[v_n].t += v;
it just concats the v to it instead of adding its values
So there i have to convert it back to a Number() before adding.

On 21/05/10 10:01, Tom Sante wrote:
> Yeah I'll try that, see if it gives me any clues.
> Is there a way to run your code manually for debugging via the command
> line with the JS engine the way couch calls it to build the view? (like
> an interactive mode of couchjs)
>
> On 21/05/10 04:59, Zachary Zolton wrote:
>> Reduce functions can be tricky. My best advice: try log()'ing all your
>> input and intermediary results; the answer usually jumps out to ya.
>>
>> On Thursday, May 20, 2010, Tom Sante<tom.sante@gmail.com> wrote:
>>> On 20/05/10 23:52, David Goodlad wrote:
>>>
>>> On Thu, May 20, 2010 at 9:38 PM, Tom Sante<tom.sante@gmail.com> wrote:
>>>
>>> Hi,
>>>
>>> I have a reduce function like this:
>>> [snip]
>>> So for some reason if there is only 1 element to be reduced, on the
>>> line of
>>> res[v_n]={'mi':v,'ma':v,'c':1,'t':v};
>>> v becomes v={} and not the actual number. Any ideas why?
>>>
>>> I tested the reduce function with the command line 'js' and send it the
>>> above test keys manually as function argument and then it does result
>>> in the
>>> correct return:
>>> "01:00:000074" -> {raw: {mi: -0.213, ma: -0.213, c: 1, t: -0.213}}
>>> "01:00:000084" -> {raw: {mi: -0.213, ma: -0.213, c: 1, t: -0.213}}
>>>
>>>
>>> Sounds like you need to specify group_level; Try playing around in
>>> Futon, you'll see a group_level dropdown.
>>>
>>> Dave
>>>
>>>
>>> Why would I need a group_level parameter?
>>> My key is a simple string "01:00:000074".
>>> Its my values don't get correctly generated by couchjs, since it does
>>> out but proper values in normal commandline js.
>>>
>>> var v = new Number(values[val][v_n]);
>>> if(res.hasOwnProperty(v_n)){
>>> res[v_n].mi = Math.min(v,res[v_n].mi);
>>> res[v_n].ma = Math.max(v,res[v_n].ma);
>>> res[v_n].c++;
>>> res[v_n].t += v;
>>> }else{
>>> res[v_n]={'mi':v,'ma':v,'c':1,'t':v};
>>> }
>>>
>>> It seems that in the above part in the 'else' case the v isn't a
>>> number but an empty object {}
>>>
>


Mime
View raw message