Что такое массив и зачем он нужен
Массив – это упорядоченная коллекция элементов, каждый из которых имеет свой индекс. В Google Apps Script массивы используются для хранения и обработки наборов данных, например, списка ключевых слов для рекламной кампании, списка URL-адресов для анализа или данных из Google Sheets. Они позволяют организовать данные в удобную структуру и выполнять над ними различные операции.
Объявление и инициализация массивов в Google Apps Script
В Google Apps Script массивы можно объявлять и инициализировать несколькими способами:
Использование литерала массива:
/**
* Объявление и инициализация массива с помощью литерала.
* @return {string[]} Массив ключевых слов.
*/
function createKeywordArray() {
const keywords: string[] = ["google ads", "контекстная реклама", "ppc"];
return keywords;
}Использование конструктора Array:
/**
* Объявление массива с помощью конструктора Array.
* @return {number[]} Пустой массив чисел.
*/
function createEmptyNumberArray() {
const numbers: number[] = new Array();
return numbers;
}Объявление массива с указанием размера (не рекомендуется, т.к. размер массива в JavaScript динамический):
/**
* Объявление массива с указанием размера (не рекомендуется).
* @return {null[]} Массив null значений.
*/
function createNullArray() {
const emptyValues: null[] = new Array(5); // Создаст массив из 5 элементов, каждый из которых null
return emptyValues;
}Основные способы получения значений из массива
Доступ к элементам массива по индексу
Получить значение элемента массива можно по его индексу. Индексация начинается с 0.
/**
* Получение элемента массива по индексу.
* @param {string[]} keywords Массив ключевых слов.
* @param {number} index Индекс элемента.
* @return {string | undefined} Элемент массива или undefined, если индекс выходит за границы массива.
*/
function getKeywordByIndex(keywords: string[], index: number): string | undefined {
return keywords[index];
}
// Пример использования:
const keywordsArray: string[] = ["google ads", "контекстная реклама", "ppc"];
const firstKeyword: string | undefined = getKeywordByIndex(keywordsArray, 0); // firstKeyword будет равен "google ads"
const outOfBounds: string | undefined = getKeywordByIndex(keywordsArray, 5); // outOfBounds будет равен undefinedИспользование цикла ‘for’ для перебора элементов массива
Цикл for позволяет перебрать все элементы массива, используя счетчик индекса.
/**
* Перебор массива с помощью цикла for.
* @param {string[]} urls Массив URL адресов.
* @return {void} Ничего не возвращает, просто выводит URL в лог.
*/
function iterateUrlsWithForLoop(urls: string[]): void {
for (let i: number = 0; i < urls.length; i++) {
const url: string = urls[i];
Logger.log(url);
}
}
// Пример использования:
const urlsArray: string[] = ["example.com", "google.com", "youtube.com"];
iterateUrlsWithForLoop(urlsArray);Метод ‘forEach’ для итерации по массиву
Метод forEach позволяет выполнить функцию для каждого элемента массива.
/**
* Перебор массива с помощью метода forEach.
* @param {number[]} bidAdjustments Массив корректировок ставок.
* @return {void} Ничего не возвращает, просто применяет корректировку к каждой ставке (имитация).
*/
function applyBidAdjustments(bidAdjustments: number[]): void {
bidAdjustments.forEach(function(adjustment: number, index: number) {
Logger.log(`Применяем корректировку ${adjustment}% к ставке для позиции ${index + 1}`);
});
}
// Пример использования:
const adjustmentsArray: number[] = [10, -5, 20];
applyBidAdjustments(adjustmentsArray);Продвинутые методы работы с массивами
Использование метода ‘map’ для создания нового массива на основе существующего
Метод map позволяет создать новый массив, применяя функцию к каждому элементу существующего массива.
/**
* Создание массива URL на основе массива ID товаров.
* @param {number[]} productIds Массив ID товаров.
* @return {string[]} Массив URL адресов товаров.
*/
function generateProductUrls(productIds: number[]): string[] {
const productUrls: string[] = productIds.map(function(productId: number) {
return `https://example.com/product/${productId}`; // пример формирования URL
});
return productUrls;
}
// Пример использования:
const idsArray: number[] = [123, 456, 789];
const urls: string[] = generateProductUrls(idsArray);
Logger.log(urls); // Выведет массив URLМетод ‘filter’ для отбора элементов массива по условию
Метод filter позволяет создать новый массив, содержащий только те элементы исходного массива, которые удовлетворяют заданному условию.
/**
* Фильтрация ключевых слов по длине.
* @param {string[]} keywords Массив ключевых слов.
* @param {number} minLength Минимальная длина ключевого слова.
* @return {string[]} Массив ключевых слов, длина которых больше или равна minLength.
*/
function filterKeywordsByLength(keywords: string[], minLength: number): string[] {
const filteredKeywords: string[] = keywords.filter(function(keyword: string) {
return keyword.length >= minLength;
});
return filteredKeywords;
}
// Пример использования:
const keywords: string[] = ["google", "ads", "контекстная реклама", "ppc"];
const longKeywords: string[] = filterKeywordsByLength(keywords, 5);
Logger.log(longKeywords); // Выведет ["google", "контекстная реклама"]Метод ‘reduce’ для свертки массива к одному значению
Метод reduce позволяет свернуть массив к одному значению, применяя функцию к аккумулятору и каждому элементу массива.
/**
* Вычисление общей суммы расходов на рекламную кампанию.
* @param {number[]} costs Массив расходов.
* @return {number} Общая сумма расходов.
*/
function calculateTotalCost(costs: number[]): number {
const totalCost: number = costs.reduce(function(accumulator: number, cost: number) {
return accumulator + cost;
}, 0); // 0 - начальное значение аккумулятора
return totalCost;
}
// Пример использования:
const costs: number[] = [100, 250, 50];
const total: number = calculateTotalCost(costs);
Logger.log(total); // Выведет 400Особенности работы с многомерными массивами
Создание и инициализация многомерных массивов
Многомерный массив – это массив, элементами которого являются другие массивы. Например, двумерный массив можно представить как таблицу.
/**
* Создание и инициализация двумерного массива.
* @return {number[][]} Двумерный массив.
*/
function createTwoDimensionalArray(): number[][] {
const data: number[][] = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
return data;
}Доступ к элементам многомерного массива
Для доступа к элементу многомерного массива необходимо указать индекс для каждого измерения.
/**
* Получение элемента двумерного массива.
* @param {number[][]} array Двумерный массив.
* @param {number} row Индекс строки.
* @param {number} col Индекс столбца.
* @return {number | undefined} Элемент массива или undefined, если индексы выходят за границы.
*/
function getElementFromTwoDimensionalArray(array: number[][], row: number, col: number): number | undefined {
return array[row]?.[col]; // Используем optional chaining для безопасности
}
// Пример использования:
const twoDimensionalArray: number[][] = createTwoDimensionalArray();
const element: number | undefined = getElementFromTwoDimensionalArray(twoDimensionalArray, 1, 2); // element будет равен 6Перебор элементов многомерного массива с использованием вложенных циклов
Для перебора всех элементов многомерного массива используются вложенные циклы.
/**
* Перебор двумерного массива.
* @param {number[][]} array Двумерный массив.
* @return {void} Ничего не возвращает, просто выводит элементы в лог.
*/
function iterateTwoDimensionalArray(array: number[][]): void {
for (let i: number = 0; i < array.length; i++) {
for (let j: number = 0; j < array[i].length; j++) {
Logger.log(`Element at [${i}][${j}]: ${array[i][j]}`);
}
}
}
// Пример использования:
const twoDimensionalArrayExample: number[][] = createTwoDimensionalArray();
iterateTwoDimensionalArray(twoDimensionalArrayExample);Практические примеры получения значений массива в Google Apps Script
Получение данных из Google Sheets в массив
/**
* Получение данных из Google Sheets в массив.
* @param {string} spreadsheetId ID таблицы Google Sheets.
* @param {string} sheetName Название листа.
* @return {any[][]} Двумерный массив данных из таблицы.
*/
function getDataFromSheet(spreadsheetId: string, sheetName: string): any[][] {
const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.openById(spreadsheetId);
const sheet: GoogleAppsScript.Spreadsheet.Sheet = ss.getSheetByName(sheetName);
if (!sheet) {
throw new Error(`Sheet with name '${sheetName}' not found.`);
}
const dataRange: GoogleAppsScript.Spreadsheet.Range = sheet.getDataRange();
const data: any[][] = dataRange.getValues();
return data;
}
// Пример использования:
// const spreadsheetId = "YOUR_SPREADSHEET_ID";
// const sheetName = "Sheet1";
// const dataArray = getDataFromSheet(spreadsheetId, sheetName);
// Logger.log(dataArray); // Выведет массив данныхОбработка данных массива и запись результатов в Google Sheets
/**
* Обработка данных массива и запись результатов в Google Sheets.
* @param {string} spreadsheetId ID таблицы Google Sheets.
* @param {string} sheetName Название листа для записи результатов.
* @param {number[][]} data Массив данных для обработки.
* @return {void}
*/
function processDataAndWriteToSheet(spreadsheetId: string, sheetName: string, data: number[][]): void {
const ss: GoogleAppsScript.Spreadsheet.Spreadsheet = SpreadsheetApp.openById(spreadsheetId);
let sheet: GoogleAppsScript.Spreadsheet.Sheet | null = ss.getSheetByName(sheetName);
if (!sheet) {
sheet = ss.insertSheet(sheetName); // Создаём лист, если его нет
}
// Пример обработки: умножаем каждое число на 2
const processedData: number[][] = data.map(row => row.map(cell => cell * 2));
// Записываем обработанные данные в таблицу
const rows: number = processedData.length;
const cols: number = processedData[0].length;
const range: GoogleAppsScript.Spreadsheet.Range = sheet.getRange(1, 1, rows, cols);
range.setValues(processedData);
}
// Пример использования:
// const spreadsheetId = "YOUR_SPREADSHEET_ID";
// const sheetName = "Results";
// const dataToProcess = [[1, 2, 3], [4, 5, 6]];
// processDataAndWriteToSheet(spreadsheetId, sheetName, dataToProcess);Использование массивов для работы с Google Forms
/**
* Получение вопросов из Google Form в массив.
* @param {string} formId ID Google Form.
* @return {string[]} Массив заголовков вопросов.
*/
function getFormQuestionTitles(formId: string): string[] {
const form: GoogleAppsScript.Forms.Form = FormApp.openById(formId);
const items: GoogleAppsScript.Forms.FormItem[] = form.getItems();
const questionTitles: string[] = items.map(item => item.getTitle());
return questionTitles;
}
// Пример использования:
// const formId = "YOUR_FORM_ID";
// const questionTitles = getFormQuestionTitles(formId);
// Logger.log(questionTitles); // Выведет массив заголовков вопросов