我一定是做了什么蠢事。数组newArea需要将所有区域的数据相加,即是全局的。区域由变量 p 表示。但是当我尝试将 newArea 数组添加到自身时,例如newArea[p] += otherArray,输出 NaN。甚至 newArea[p] += 1 也会输出 NaN。
有人能发现我做错了什么吗?这让我抓狂,而且我正在按时完成任务。
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 中的数组
时,都会对其进行清理:
...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
时,它将在 newArea
数组的 q
位置填充一个数组。但是,p
的下一次迭代会将它们清除,因此没有什么可求和的。
您可能想要保留旧数组或创建一个新数组(如果没有)。
newArea[q] = newArea[q] || [];
关于javascript - 数组等于自身加数字 = NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35391823/