Javascript 如何正确地遍历大型2D数组并记录将其数组传递给方法的结果

Javascript 如何正确地遍历大型2D数组并记录将其数组传递给方法的结果,javascript,arrays,debugging,iteration,Javascript,Arrays,Debugging,Iteration,在学习了许多其他编码语言之后,我正在尝试Javascript *Edit*我修复了这个问题,我只需在两个外部for循环中使用let关键字,这两个循环使用I作为迭代器变量的相同名称 我有一个包含29行的2D int数组,每个数组包含一个长度为744的数组(744*29=21576个数字),我希望将每个数组或列传递给一个执行数学表达式(即所有值的平均值、标准偏差等)的方法,并将结果记录到我的控制台。当我尝试这样做时,循环只输出第一个数组中数字的计算结果,而不输出其他任何结果。我可能错了,但我感觉解决

在学习了许多其他编码语言之后,我正在尝试Javascript

*Edit*我修复了这个问题,我只需在两个外部for循环中使用let关键字,这两个循环使用I作为迭代器变量的相同名称

我有一个包含29行的2D int数组,每个数组包含一个长度为744的数组(744*29=21576个数字),我希望将每个数组或列传递给一个执行数学表达式(即所有值的平均值、标准偏差等)的方法,并将结果记录到我的控制台。当我尝试这样做时,循环只输出第一个数组中数字的计算结果,而不输出其他任何结果。我可能错了,但我感觉解决方案可能与等待结果和/或利用异步行为有关,或者与我对如何将数组作为对象处理的误解有关

首先也是最重要的一点,我已经在fs.readFile方法中编写了所有的活动代码,该方法读取一个JSON文件,该文件为我提供了所需的数据

fs.readFile('./doc.json', 'utf-8', (err, text) => {...
结果数据是一个对象数组。以下是数组中的信息层次结构。我使用三重for循环来访问所需的数据并填充我的2D数组。(我知道这几乎不是实现这一目标的最有效方式,但我认为它仍然应该有效)

//数组[
//对象{。。。
//属性:内部数组[
//内部对象{。。。
//所需属性:包含所需值{…}的对象
// },...
// ]
// },...
// ]
for(设i=0;i
填充后,我可以遍历2D数组并简单地将每个数字数组记录到控制台(下面的循环在前面的循环之外)

for(i=0;i
但是,当我尝试将同一数组传递到GetTotal方法(检索数组中所有数字的总和)并存储结果时,程序输出第一个数字数组的平均值,并立即结束

for(i = 0; i < arr.length; i++){
    console.log("array number " + (i + 1) + ": " + arr[i]);
    let tot = GetTotal(arr[i]);
    console.log("\nTotal: " + tot);
}

function GetTotal(nums){
  let sum = 0;
  for(i = 0; i < nums.length; i++){
    sum += nums[i];
  }
  return sum;
}
for(i=0;i
不太清楚如何在此处发布图片,我相信这些图片将有助于更好地将情况可视化

我使用Create2DArray方法初始化二维数组,然后用零填充每个新数组:

var arr= Create2DArray(numRows, numCols);
for(i = 0; i < arr.length; i++){
  for(j = 0; j < arr[i].length; j++){
    arr[i][j] = 0;
  }
}
function Create2DArray(rows,cols){
  let newArr = [];
  for(i = 0; i < rows; i++){
    newArr.push(new Array(cols));
  }
  return newArr;
}
var arr=Create2DArray(numRows,numCols);
对于(i=0;i
我希望看到在所有数字数组上执行该方法计算的结果,而不仅仅是第一个数组


谢谢您的时间。

我不确定您是否了解您到底在寻找什么。这将是我解决此类问题的方法:

var数据数组=[
{propertyArr:[{prop1:1,prop2:2},{prop1:1,prop2:2}]},
{propertyArr:[{prop1:3,prop2:4},{prop1:3,prop2:4}]},
{propertyArr:[{prop1:5,prop2:6},{prop1:5,prop2:6}]
]
var valueArray=[1,2,3,4,5,6,7];
var resultValues=dataArray.map((元素,i)=>{
var arr=element.propertyArr.map((object,j)=>{
var value=valueArray[object.prop1]+valueArray[object.prop2];
返回值;
})
返回arr;
});
结果值。forEach((elementArr,i)=>{
elementArr.forEach((element2Arr,j)=>{
log(`resultValues[${i},${j}]:[${resultValues[i][j]}]`);
})                       

})
我不确定您是否了解您到底在寻找什么。这将是我解决此类问题的方法:

var数据数组=[
{propertyArr:[{prop1:1,prop2:2},{prop1:1,prop2:2}]},
{propertyArr:[{prop1:3,prop2:4},{prop1:3,prop2:4}]},
{propertyArr:[{prop1:5,prop2:6},{prop1:5,prop2:6}]
]
var valueArray=[1,2,3,4,5,6,7];
var resultValues=dataArray.map((元素,i)=>{
var arr=element.propertyArr.map((object,j)=>{
var value=valueArray[object.prop1]+valueArray[object.prop2];
返回值;
})
返回arr;
});
结果值。forEach((elementArr,i)=>{
elementArr.forEach((element2Arr,j)=>{
log(`resultValues[${i},${j}]:[${resultValues[i][j]}]`);
})                       

})
在用随机值填充数组后,我无法重新创建您的问题。也许一个更完整的代码示例可以提供线索,该示例显示流程中各部分的作用域关系?看见感谢您的评论,我添加了有关访问/填充数据的更多信息。所有其他代码只是存储和调试不同的值,如查找标准偏差、查找stdDev输出、最大平均值、最大总计,etcI在用随机值填充数组后无法重新创建问题。也许一个更完整的代码示例可以提供线索,该示例显示流程中各部分的作用域关系?看见谢谢你的评论,我添加了更多关于acces的信息
for(i = 0; i < arr.length; i++){
    console.log("array number " + (i + 1) + ": " + arr[i]);
    let tot = GetTotal(arr[i]);
    console.log("\nTotal: " + tot);
}

function GetTotal(nums){
  let sum = 0;
  for(i = 0; i < nums.length; i++){
    sum += nums[i];
  }
  return sum;
}
var arr= Create2DArray(numRows, numCols);
for(i = 0; i < arr.length; i++){
  for(j = 0; j < arr[i].length; j++){
    arr[i][j] = 0;
  }
}
function Create2DArray(rows,cols){
  let newArr = [];
  for(i = 0; i < rows; i++){
    newArr.push(new Array(cols));
  }
  return newArr;
}