数组等于自身加数= NaN

时间:2016-02-14 12:35:56

标签: javascript arrays

我必须做些蠢事。 newArea数组需要添加来自所有区域的数据,即全局数据。区域由变量p表示。但是,当我尝试将newArea数组添加到自身时,例如newArea [p] + = otherArray,输出NaNs。甚至newArea [p] + = 1也输出NaNs。

有人能发现我做错了吗?这让我很生气,我正在按时完成工作。

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);

2 个答案:

答案 0 :(得分:1)

看起来你没有初始化变量。通过向undefined添加内容,您可以获得NaN

您可以使用默认值更改递增的艺术:

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

答案 1 :(得分:1)

每次循环播放时,您正在清理newArea中的array

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

因此,当p === 0填充q数组的newArea pos处的数组时。但是,p的下一次迭代会清除它们,所以没有任何东西可以求和。

如果没有旧数组,您可能希望保留旧数组或创建一个新数组。

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