Как использовать Карту В Скрипте Функциональных приложений

#google-apps-script

Вопрос:

У меня есть простой скрипт карты, который берет массив и возвращает n-й столбец. Вот пример с n=2:

 var array1 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]];

var newArray = array1.map(function(column){
               return [column[2]]
              });
Logger.log(newArray); 
 

Я хочу превратить это в функцию, в которой пользователь вводит массив var data и номер столбца var n и возвращает n-й столбец. Вот как я написал эту функцию:

 function selectCol(data,n){
  return data.map(function(column){
  return [column[n]]
  })
  }
 

Когда я пытаюсь использовать эту функцию, например:

 var array1 = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]];
Logger.log(selectCol(array1,2));
 

Я получаю ошибку: TypeError: Cannot read property 'map' of undefined .

Как мне встроиться .map в реальную функцию?


Согласно ответу Робина ниже, похоже, что я хочу объявить фиктивную функцию в начале сценария, а затем выбрать ее в качестве своей основной функции: введите описание изображения здесь

Комментарии:

1. Вы selectColumn выбрали на самом верху? Это приведет к тому, что все тело будет запущено один раз (чтобы определить все), а затем selectColumn будет вызвано без аргументов. Вам, вероятно, нужна какая-то main функция, которая не принимает аргументов.

2. Мне очень жаль, но я не понимаю, о чем вы говорите. Не могли бы вы привести пример или более подробную информацию? Спасибо

Ответ №1:

В сценарии Google Apps вы всегда выбираете выполняемую функцию.

Затем происходит следующее: выполняется весь сценарий, а затем функция вызывается без аргументов.

Если вы запустите свой код, вы заметите, что вывод, вероятно, зарегистрирован, а затем ошибка появляется из ниоткуда.

Это происходит из-за того, что основной код выполняется как часть установки, ошибка происходит из selectCol -за того, что затем вызывается без аргументов.

Решение состоит в том, чтобы иметь некоторую main функцию, которую можно запускать без аргументов.

Комментарии:

1. Я вижу! Я добавил изображение выше к своему первоначальному вопросу. Это то, что вы предлагаете?

2. Например. На практике вы, вероятно, захотите вставить строки 18-20 myFunction в случае, если вы добавляете новые функции, и вы не хотите, чтобы selectCol запускался каждый раз.

3. Спасибо. У вас случайно нет ссылки на то, как работает этот процесс? Мне явно не хватает этих знаний. Спасибо.

4. Я могу рекомендовать только официальную документацию . Однако я не уверен, что этот конкретный момент изложен в каком-либо конкретном разделе.

5. Понял. Большое спасибо. Очень полезно. Я нашел отличное видео здесь: youtube.com/watch?v=gofQzXnIg7w кстати, для всех, кто также начинает и пытается понять то, что вы описали.