Как правильно перебрать большой 2D-массив и записать результаты передачи его массивов в метод - PullRequest
1 голос
/ 04 апреля 2019

Я пробую свои силы в Javascript после изучения ряда других языков программирования.

* Редактировать * Я исправил проблему, мне просто пришлось использовать ключевое слово let в обоих внешних для циклов, которые использовали я как то же имя для переменной итератора.

У меня есть двумерный массив int с 29 строками, каждая из которых содержит массив длиной 744 (744 * 29 = 21576 чисел), и я хотел бы передать каждый массив или столбец в метод, которыйвыполняет математические выражения (то есть среднее значение всех значений, стандартное отклонение и т. д.) и записывает результаты в мою консоль.Когда я пытаюсь это сделать, цикл выводит только результаты вычисления чисел в 1-м массиве, и ни один из остальных.Возможно, я ошибаюсь, но у меня есть ощущение, что решение может быть связано с ожиданием результата и / или использованием асинхронного поведения, или с моим неправильным пониманием того, как обращаться с массивом как объектом.

Сначалаи прежде всего я написал весь свой активный код в методе fs.readFile, который считывает файл JSON, предоставляющий мне нужные данные.

fs.readFile('./doc.json', 'utf-8', (err, text) => {...

Полученные данные представляют собой массив объектов.Ниже приведена иерархия информации, найденной в массиве.Я использую triple for loop , чтобы получить доступ к нужным данным и заполнить мой 2D-массив.(Я знаю, что это далеко не самый эффективный способ сделать это, но я полагаю, что он, тем не менее, должен работать)массив чисел на консоль (следующий цикл находится за пределами предыдущего цикла)

for(i = 0; i < arr.length; i++){
    console.log("array number " + (i + 1) + ": " + arr[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;
}

Не совсем уверен, как разместить фотографии здесь, я уверен, что это будет полезно для лучшей визуализации ситуации

Я инициализирую свой 2D-массив, используяСоздайте метод 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;
}

Я хотел бы видеть результат выполнения вычислений метода для ВСЕХ массивов чисел, а не только для первого.

Спасибо за ваше время.

...