Создание и выполнение сложения на двумерном массиве - PullRequest
0 голосов
/ 17 сентября 2018

Я начал создавать веб-приложение для отображения сетки (или таблицы) 8х10 с итогом в каждой ячейке. Результирующие суммы могут выглядеть примерно так:

enter image description here

У меня есть столбцы и строки, хранящиеся в электронной таблице, и мне нужно построить этот двумерный массив из потенциала из 8 компетенций и 10 целей. Например, приведенные ниже данные приведут к появлению «1» в ячейке [1,2] и «2» в ячейке [1,3] (потому что [1,3] отображается в первой и второй строках).

enter image description here

Код, который у меня есть, кажется очень громоздким из-за необходимости преобразования строк электронной таблицы в массив для циклического прохождения. Есть ли лучший / правильный путь? И я не могу построить 2D-массив для суммирования перекрывающихся чисел. Мои глаза становятся размытыми, когда я собираю объект matrix . Любые предложения приветствуются!

function retrieveLearnerActivity(formObject) {
  var email = "info@arcacademy.ca";//formObject.learner;
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];

  var lastRow = sheet.getLastRow();
  var cols = sheet.getLastColumn();

  var inquiries = sheet.getRange(2, 1, lastRow, cols).getValues(); // 1st is 
  header row

  var html = "";
  var matrix = [[]];
  var row = [];
  // each row in values is a unique inquiry
  for (var i in inquiries) {
    // drop down list email MATCHES spreadsheet value
    if (inquiries[i][3] == email) {
      // count a 1 for each competency and objective overlap
      var comps = [inquiries[i][1]];
      var objs = [inquiries[i][2]];
      // split string value into an array
      var cList = [];  // competency list
      var oList = [];  // objectives list
      var listValue = "";
      var val = inquiries[i][1];//sheet.getRange(searchResult+2, 2).getValue();
      listValue = new String(val);
      var cList = listValue.split(",");

      val = inquiries[i][2];//sheet.getRange(searchResult+2, 3).getValue();
      listValue = new String(val);
      oList = listValue.split(",");

    // construct 2D array
    for (var c=0; c<cList.length; c++) {
      for (var o=0; o<oList.length; o++) {

        matrix[c] = matrix[c] || [];
        matrix[cList[c],oList[o]] = 1;//Number(matrix[cList[c],oList[o]]) + 1;
        Logger.log("c="+c+":o="+o+"::matrix="+matrix[cList[c],oList[o]] + "::clist=" +cList[c] + ":olist=" + oList[o]);
      }
    }
   }
  }
  Logger.log(matrix);
  return matrix;
}

Я чувствую, что метод, который я делаю, слишком сложен, поэтому, возможно, мне трудно разобраться в кодировании. Любые предложения по извлечению компетенций и целей таким образом, чтобы можно было легко построить 2D-массив? И как мне добавить к существующим значениям в матрица ?

...