L oop на несколько строк в JavaScript? - PullRequest
0 голосов
/ 26 марта 2020

Я застрял, простой, но страшный для l oop - мой заклятый враг, и я мог бы помочь. У меня есть лист Google, который в настоящее время имеет 3 строки (не включая заголовки) и 8 столбцов. количество строк будет расти динамически, так как пользователи вводят данные через веб-приложение. Мне нужно взять данные, собранные в этом листе, и использовать их для направления электронной почты определенной службе в нашей организации.

Мне не нужны все 8 столбцов данных, на самом деле мне нужны только 6. То, с чем я борюсь, это итерация по всем столбцам и строкам. Я пробовал простой для l oop, вложенный для l oop и a для каждой функции, ни одна из которых не дает ожидаемого результата: (

Мой самый последний код приведен ниже:

function serviceSelector() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Response');
  var row = sheet.getLastRow();
  var range = sheet.getDataRange();
  var data = range.getValues();
  var holderArray = [];
  for(i = 0; i < data.length; i++){
     holderArray.push(
       data[1][0],
       data[1][1],
       data[1][2],
       data[1][4],
       data[1][5],
       data[1][6]);
  }
 Logger.log(holderArray);


//  switch(holderArray[1]){
//    case 'Volunteering':
//      MailApp.sendEmail('andypaulstevens@gmail.com', 'Message ID# ' +holderArray[2], 'You have receive the following message regarding Volunteering: \n\n'+holderArray[3]); 
//      break;  
//    case 'Home Help Service':
//      MailApp.sendEmail('andypaulstevens@gmail.com', 'Message ID# ' +holderArray[2], 'You have receive the following message regarding the Home Help Service: \n\n'+holderArray[3]); 
//      break;
//  }
} 

Я прокомментировал оператор switch, чтобы решить проблему с получением правильных данных.

Следуя предоставленной рекомендации GREAT, я обновил свой код следующим образом:

function serviceSelector() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Response');
  var row = sheet.getLastRow();
  var range = sheet.getRange(2,1, sheet.getLastRow() -1,8);
  var data = range.getValues();
  var holderArray = [];
  for(i in data[0]){
    for(j in data[i]){
      holderArray.push(data[j])
    }
  }

  Logger.log(holderArray);

Вывод журнала выглядит следующим образом:

[20-03-26 12: 35: 22: 136 GMT] [[Энди Стивенс, andys@.com, ср. 25 марта 2020 16:43: 38 GMT + 0000 (среднее время по Гринвичу), k87k4rp4, Служба справки на дому, Hello World, andy. s@.uk], [Энди, Стивенс, andys@.com, ср. 25 марта 2020 16:44:40 GMT + 0000 (среднее по Гринвичу) Время), k87k63ae, Служба справки на дому, Hello World, andy. s@.uk], [Энди, Стивенс, andys@.com, ср. 25 марта 2020 16:46:38 GMT + 0000 (среднее время по Гринвичу), k87k8mmo, справка на дому Сервис, Привет Joolz, Просто отправив быстрое электронное письмо, чтобы показать вам, как будет работать веб-форма. Я получаю с этим, просто нужны адреса электронной почты и выяснить, как его вызвать, когда мы получим ответ. Кроме этого, он почти завершен :), andy. s@.uk], null, null, null, null, null, [Andy, Stevens, andys@.com, ср. 25 марта 2020 16:43:38 GMT + 0000 (среднее по Гринвичу) Время), k87k4rp4, Служба справки на дому, Hello World, andy. s@.uk], [Энди, Стивенс, andys@.com, ср. 25 марта 2020 16:44:40 GMT + 0000 (среднее время по Гринвичу), k87k63ae, справка на дому Служба, Hello World, andy. s@.uk], [Энди, Стивенс, andys@.com, ср. 25 марта 2020 16:46:38 GMT + 0000 (среднее время по Гринвичу), k87k8mmo, Служба справки на дому, Привет, Джолз, Просто отправка быстрое электронное письмо, чтобы показать вам, как будет работать веб-форма. Я получаю там с этим, просто нужны адреса электронной почты и выяснить, как вызвать его, когда мы получим ответ. Кроме этого, он почти завершен :), andy. s@.uk], null, null, null, null, null, [Andy, Stevens, andys@.com, ср. 25 марта 2020 16:43:38 GMT + 0000 (среднее по Гринвичу) Время), k87k4rp4, Служба справки на дому, Hello World, andy. s@.uk], [Энди, Стивенс, andys@.com, ср. 25 марта 2020 16:44:40 GMT + 0000 (среднее время по Гринвичу), k87k63ae, справка на дому Служба, Hello World, andy. s@org.uk], [Andy, S, andys@.com, ср. 25 марта 2020 16:46:38 GMT + 0000 (среднее время по Гринвичу), k87k8mmo, Служба справки на дому, Hi Joolz, Просто отправка быстрое электронное письмо, чтобы показать вам, как будет работать веб-форма. Я получаю там с этим, просто нужны адреса электронной почты и выяснить, как вызвать его, когда мы получим ответ. Кроме этого он почти завершен :), andy. s@.uk], null, null, null, null, null]

Полный код, добавленный ниже, включая инструкцию switch, где я ошибаюсь?

function serviceSelector() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Response');
  var row = sheet.getLastRow();
  var range = sheet.getRange(2,1, sheet.getLastRow() -1,8);
  var data = range.getValues();
  var cols = range.getNumColumns();
  var rows = range.getNumRows();
  var holderArray = [];
  for (var i = 0; i < rows; i++){
    for (var j = 0; j < cols; j++) {
       holderArray.push(data[i][j]);
    }
  }
  Logger.log(holderArray);
  Logger.log(holderArray);
  switch(holderArray[5]){
    case 'Volunteering':
      MailApp.sendEmail(holderArray[2], 'Message ID# ' +holderArray[4], 'You have receive the following message regarding Volunteering: \n\n'+holderArray [6]); 
      break;  
    case 'Home Help Service':
      MailApp.sendEmail(holderArray[2], 'Message ID# ' +holderArray[4], 'You have receive the following message regarding the Home Help Service: \n\n'+holderArray [6]); 
      break;
  }
}

1 Ответ

1 голос
/ 26 марта 2020

Объяснение

Ваша переменная data представляет собой двумерный массив , что по сути означает, что для его обхода вам понадобятся два цикла for в этом дело. Поскольку data может не иметь одинакового количества строк и столбцов, вы можете добавить две переменные, которые будут представлять numbers of rows и columns, которые у вас есть. Таким образом, один l oop будет проходить через строки, а другой - через столбцы. Поэтому каждый обход представлен элементом data[i][j].

Фрагмент

 var cols = range.getNumColumns();
 var rows = range.getNumRows();
 var holderArray = [];
 for (var i = 0; i < rows; i++) 
    for (var j = 0; j < cols; j++) 
       holderArray.push(data[i][j]);

Если вам нужны только столбцы 6, вы можете легко заменить переменную cols на 6 .

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...