Google Apps Script: Как определить массив?

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

Массив – это упорядоченная коллекция элементов, которая позволяет хранить несколько значений под одним именем переменной. В Google Apps Script массивы используются для эффективного хранения и обработки наборов данных, будь то списки клиентов для email-рассылки, данные о рекламных кампаниях или результаты анализа данных из Google Sheets. Использование массивов значительно упрощает код и делает его более читаемым, особенно при работе с большими объемами информации.

Основные характеристики массивов в Apps Script

  • Динамический размер: Размер массива в Apps Script не фиксирован и может изменяться в процессе выполнения скрипта. Это позволяет добавлять или удалять элементы по мере необходимости.
  • Различные типы данных: Массив может содержать элементы разных типов (числа, строки, булевы значения, другие массивы, объекты).
  • Нулевая индексация: Первый элемент массива имеет индекс 0, второй – 1 и так далее.
  • Объекты: В Apps Script массивы являются объектами, что означает, что у них есть методы и свойства.

Способы определения массивов в Google Apps Script

Литеральный способ: []

Самый простой и распространенный способ создания массива – использование литеральной нотации []:

/**
 * @description Создает массив ключевых слов для рекламной кампании.
 * @return {string[]} Массив ключевых слов.
 */
function createKeywordsArray() {
  const keywords = ["купить", "заказать", "цена", "скидка"];
  Logger.log(keywords); // [купить, заказать, цена, скидка]
  return keywords;
}

Этот способ наиболее предпочтителен за его краткость и читаемость.

Использование конструктора Array()

Можно создать массив с помощью конструктора Array():

/**
 * @description Создает массив email адресов.
 * @param {number} size Размер массива.
 * @return {string[]} Массив email адресов.
 */
function createEmailArray(size) {
  const emails = new Array(size); // Создает массив указанного размера
  Logger.log(emails.length); // size
  return emails;
}

Или:

/**
 * @description Создает массив с предопределенными значениями.
 * @return {number[]} Массив чисел.
 */
function createNumbersArray() {
  const numbers = new Array(1, 2, 3, 4, 5);
  Logger.log(numbers); // [1.0, 2.0, 3.0, 4.0, 5.0]
  return numbers;
}

Хотя этот способ и рабочий, литеральный способ создания массивов обычно более предпочтителен.

Создание многомерных массивов

В Apps Script можно создавать многомерные массивы, представляющие собой массивы массивов. Это полезно для представления табличных данных:

/**
 * @description Создает таблицу данных об эффективности рекламных кампаний.
 * @return {string[][]} Двумерный массив данных.
 */
function createCampaignDataTable() {
  const campaignData = [
    ["Кампания 1", 1000, 100],
    ["Кампания 2", 1500, 150],
    ["Кампания 3", 2000, 200]
  ];
  Logger.log(campaignData[0][1]); // 1000 (затраты для Кампании 1)
  return campaignData;
}

Примеры использования массивов

Хранение и обработка данных из Google Sheets

Массивы часто используются для получения данных из Google Sheets и их последующей обработки:

/**
 * @description Считывает данные из Google Sheets и обрабатывает их.
 */
function processSheetData() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const range = sheet.getDataRange();
  const values = range.getValues(); // Получаем данные в виде двумерного массива

  //values.forEach(row => Logger.log(row));
  //Вывод каждой строки

  for (let i = 0; i < values.length; i++){
    Logger.log(values[i])
  }
}

Формирование динамических списков

Массивы позволяют динамически формировать списки элементов на основе определенных условий:

/**
 * @description Создает список активных рекламных кампаний.
 * @param {object[]} campaigns Массив объектов рекламных кампаний.
 * @return {string[]} Массив названий активных кампаний.
 */
function getActiveCampaigns(campaigns) {
  const activeCampaigns = [];
  for (let i = 0; i < campaigns.length; i++) {
    if (campaigns[i].status === "active") {
      activeCampaigns.push(campaigns[i].name);
    }
  }
  return activeCampaigns;
}

Работа с данными JSON

При работе с API часто используются данные в формате JSON. Apps Script позволяет легко преобразовывать JSON в массивы и обратно:

/**
 * @description Парсит JSON строку и выводит данные.
 */
function parseJsonData() {
  const jsonData = '{"name": "Example", "clicks": 123, "cost": 12.34}';
  const parsedData = JSON.parse(jsonData);

  Logger.log(parsedData.name); // Example
  Logger.log(parsedData.clicks); // 123
  Logger.log(parsedData.cost); // 12.34
}

Основные методы работы с массивами

Добавление и удаление элементов: push(), pop(), shift(), unshift()

  • push(element): добавляет элемент в конец массива.
  • pop(): удаляет последний элемент из массива и возвращает его.
  • shift(): удаляет первый элемент из массива и возвращает его.
  • unshift(element): добавляет элемент в начало массива.

Изменение массивов: splice(), slice()

  • splice(start, deleteCount, item1, ..., itemX): изменяет содержимое массива, удаляя или заменяя существующие элементы и/или добавляя новые.
  • slice(start, end): возвращает новый массив, содержащий часть исходного массива, от start до end (не включая end).

Перебор элементов массива: for, forEach(), map()

  • for: Классический цикл для перебора элементов массива по индексу.
  • forEach(callback): Выполняет указанную функцию один раз для каждого элемента в массиве.
  • map(callback): Создает новый массив, содержащий результаты вызова указанной функции для каждого элемента исходного массива.

Распространенные ошибки и как их избежать

Неправильное определение размера массива

При создании массива с помощью конструктора Array(size) убедитесь, что размер соответствует вашим потребностям. Создание слишком большого массива может привести к неэффективному использованию памяти.

Использование некорректных индексов

Помните, что индексация массивов начинается с 0. Обращение к индексу, выходящему за пределы массива, приведет к ошибке.

Сравнение массивов

Нельзя сравнивать массивы напрямую с помощью оператора ==. Этот оператор сравнивает ссылки на объекты, а не их содержимое. Для сравнения массивов необходимо сравнивать их элементы поочередно.


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