Бомбардировка из скрипта Google из-за не объявленной позиции массива - PullRequest
0 голосов
/ 16 апреля 2020

У меня очень большой 2-мерный массив (для этого случая давайте просто сделаем его 20 строк х 5 столбцов). Если я нахожусь в n-й строке, я должен проверить, не меньше ли n-й + 1 ряд (скажем, столбец 3) чем n-й ряд. Проблема в том, что nth + 1 строка (data [nth + 1] = []) не была создана, поэтому сценарий бомбится.

(1) есть способ узнать, есть ли строка в массиве был создан? или

(2) есть ли способ сообщить, что nth + 1 расположение массива не было создано? Я попробовал isError_ (), но это только что взорванный скрипт.

Пример:

function tester() {
  var data = [ [] , [] ];  
  data[1] = [];  
  data[1][1] = 10;  
  for (i=1 ; i < 5 ; i++) {   
    if (data[1][1] < data[i+1][1]) { Browser.msgBox("You have a problem", Browser.Buttons.OK);}
  }  
}

Также: есть ли у кого-нибудь лучшее предложение для редактора сценариев, чем для редактора сценариев листов Google. Кажется, позади редактора EXCELS VBA светлые годы? EXCEL позволяет вам выбрать 3 или 4 переменные, которые вы хотите видеть, а не общий список всех переменных, по которым вам затем придется искать. Кроме того, когда вы перемещаетесь по функции с использованием разрывов, список переменных постоянно меняется и перемещает имена переменных, что весьма запутанно. Спасибо за любые предложения.

1 Ответ

0 голосов
/ 16 апреля 2020

Длина массива:

Вы можете использовать свойство length объектов Array, чтобы ограничить количество итераций в вашем l oop в зависимости от длины вашего внешнего массива, data.

Вы должны изменить это:

for (i=1 ; i < 5 ; i++) {

На это:

for (var i = 1 ; i < data.length - 1; i++) { 

Примечание:

  • Если вы инициализируете l oop с var i = 1, первый элемент в data игнорируется (индексы массива начинаются с 0). Измените это на var i = 0, если вы хотите избежать этого.

Ссылка:

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