我一定在做蠢事。数组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);

最佳答案

您每次循环遍历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位置的数组。但是,p的下一次迭代将清除它们,因此没有什么可累加的。

您可能想保留旧的阵列,或者如果没有一个则创建一个新的阵列。

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

10-08 06:31