Google Apps Script: Как получить значение массива?

Что такое массив и зачем он нужен

Массив – это упорядоченная коллекция элементов, каждый из которых имеет свой индекс. В 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); // Выведет массив заголовков вопросов

Добавить комментарий