emma
emma

Reputation: 804

Array equals itself plus number = NaN

I must be doing something stupid. The array newArea needs to add up data from all regions, i.e. be global. Regions are represented by variable p. But when I try to get newArea array to add to itself, e.g. newArea[p] += otherArray, it outputs NaNs. Even newArea[p] += 1 outputs NaNs.

Can anyone spot what I'm doing wrong? It's driving me mad and I'm working to a deadline.

mm=0
    var maxVolume = 0;
    var tempCAGR = 0;
    var maxCAGR = 0;

    var newArray = [];
    var newRegions = [];
    var newConsValues = [];
    var newArea = [];

    for (var p=0; p<arrayRef[mm].length; p++) {//9 regions


        newArray[p] = [];

        for (var q=0; q<arrayRef[mm][p].length; q++) {//4 scenarios

            newArea[q] = [];

            if (q==0) {
                newRegions.push(arrayRef[mm][p][q][0]);
                newConsValues.push(arrayRef[mm][p][q][1]);
            }

            for (var r=0; r<dates.length; r++) {//time

                //console.log('p: '+p+', q: '+q+', r: '+r);

                if (p==0) {
                    newArea[q][r] = 1;
                } else {
                    newArea[q][r] += 1;
                }
            }

            arrayRef[mm][p][q].shift();


            tempCAGR = Math.pow(( arrayRef[mm][p][q][len] / arrayRef[mm][p][q][1] ),(1/len))-1;
            //console.log(newRegions[p]+', num: '+arrayRef[mm][p][q][len-1]+', denom: '+arrayRef[mm][p][q][0]+', len: '+len+', cagr: '+tempCAGR);
            newArray[p][q] = tempCAGR;

            maxCAGR = Math.max(maxCAGR,tempCAGR);
        }
    }

    console.log(newArea);

Upvotes: 0

Views: 46

Answers (2)

MinusFour
MinusFour

Reputation: 14423

You are cleaning the array in newArea everytime you loop through it:

...loop q ...
   newArea[q] = []; // <-- resets the array at q pos
    ... loop r ...
            if (p==0) {
                newArea[q][r] = 1;
            } else {
                newArea[q][r] += 1;
            }

So when p === 0 it will fill an array at q pos of your newArea array. However, next iteration of p will clear them out, so there's nothing there to sum.

You probably want to keep the old array or create a new one if there isn't one.

newArea[q] = newArea[q] || [];

Upvotes: 1

Nina Scholz
Nina Scholz

Reputation: 386728

It looks like you do not have the variable initialised. With adding something to undefined, you get NaN.

You can change the art of incrementing with a default value:

 if (p == 0) {
     newArea[q][r] = 1; 
 } else {
     newArea[q][r] = (newArea[q][r] || 0) + 1;
 }

Upvotes: 1

Related Questions