#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 кстати, для всех, кто также начинает и пытается понять то, что вы описали.