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

Что такое ключи и зачем они нужны в Google Apps Script

В Google Apps Script, как и во многих других языках программирования, ключи играют важную роль в организации и доступе к данным. Ключ – это уникальный идентификатор, который позволяет получить доступ к определенному значению в структуре данных. Они необходимы для работы с объектами и ассоциативными массивами, позволяя эффективно извлекать, изменять или удалять данные.

Основные типы структур данных, использующих ключи (объекты, ассоциативные массивы)

В Google Apps Script ключи наиболее часто используются в двух основных типах структур данных:

Объекты (Objects): Объекты представляют собой наборы свойств, где каждое свойство состоит из имени (ключа) и значения. Ключи объектов обычно являются строками.

Ассоциативные массивы (Associative Arrays): Хотя в JavaScript (на котором основан Google Apps Script) нет встроенного типа данных «ассоциативный массив», объекты часто используются для эмуляции их поведения. В этом контексте, объект рассматривается как коллекция пар ключ-значение.

Получение значения ключа из объекта в Google Apps Script

Использование точечной нотации (object.key) для доступа к значениям

Точечная нотация – это один из наиболее распространенных и читаемых способов доступа к значениям свойств объекта. Она использует точку (.) для разделения имени объекта и имени ключа.

/**
 * @param {object} obj - Объект, из которого нужно получить значение.
 * @param {string} key - Ключ, значение которого нужно получить.
 * @return {any} Значение ключа или undefined, если ключ не найден.
 */
function getValueWithDotNotation(obj, key) {
  // @ts-ignore
  return obj.key; // this is problematic - always accesses a property named literally 'key'
}

/**
 * @param {object} obj The object.
 * @return {string} Gets value.
 */
function getMyValue(obj) {
  return obj.myValue;
}

const myObject = { name: 'Иван', age: 30 };
const nameValue = myObject.name; // nameValue будет равен 'Иван'
Logger.log(nameValue);

Важно: Точечная нотация работает только в том случае, если имя ключа известно во время написания кода и является допустимым идентификатором JavaScript (начинается с буквы, $ или _, и не содержит пробелов или других специальных символов).

Использование квадратных скобок (object[‘key’]) для доступа к значениям

Квадратные скобки ([]) предоставляют более гибкий способ доступа к значениям свойств объекта. Они позволяют использовать переменные или выражения для определения имени ключа.

/**
 * @param {object} obj - Объект, из которого нужно получить значение.
 * @param {string} key - Ключ, значение которого нужно получить.
 * @return {any} Значение ключа или undefined, если ключ не найден.
 */
function getValueWithBrackets(obj, key) {
  return obj[key];
}

const myObject = { name: 'Иван', age: 30 };
const keyName = 'name';
const nameValue = myObject[keyName]; // nameValue будет равен 'Иван'
Logger.log(nameValue);

Различия и преимущества между точечной нотацией и квадратными скобками

Точечная нотация: Проще и читаемее для статических ключей, известных во время разработки.

Квадратные скобки: Необходимы для динамического доступа к ключам (когда имя ключа определяется переменной или выражением) или когда имя ключа не является допустимым идентификатором JavaScript.

const object = {
  "first name": "John",
  "last name": "Doe"
};

// object.first name // Ошибка: SyntaxError: Unexpected identifier
object["first name"]; // "John"

Обработка ошибок при попытке доступа к несуществующему ключу

При попытке доступа к несуществующему ключу объекта возвращается значение undefined. Важно обрабатывать такие ситуации, чтобы избежать ошибок в коде. Можно использовать оператор typeof или проверку на undefined.

const myObject = { name: 'Иван' };
const ageValue = myObject.age; // ageValue будет равен undefined

if (typeof ageValue !== 'undefined') {
  Logger.log('Возраст: ' + ageValue);
} else {
  Logger.log('Возраст не указан');
}
Реклама

Получение значения ключа из ассоциативного массива

Объявление и инициализация ассоциативных массивов в Google Apps Script

Как упоминалось ранее, в Google Apps Script нет встроенного типа данных «ассоциативный массив». Объекты используются для эмуляции их поведения. Инициализация выглядит стандартно для объектов.

const асоциативныйМассив = {
  'name': 'Иван',
  'age': 30
};

Использование квадратных скобок (array[‘key’]) для доступа к значениям

Для доступа к значениям в ассоциативном массиве (объекте) всегда используются квадратные скобки, так как ключи являются строками. Точечная нотация допустима, но нежелательна, так как менее гибка.

const асоциативныйМассив = {
  'name': 'Иван',
  'age': 30
};

const nameValue = асоциативныйМассив['name']; // nameValue будет равен 'Иван'
Logger.log(nameValue);

Примеры получения значений ключей в различных сценариях

Предположим, у вас есть объект, представляющий информацию о пользователе, полученную из формы Google Forms:

const formData = {
  'Имя': 'Иван',
  'Фамилия': 'Иванов',
  'Email': 'ivan@example.com'
};

const email = formData['Email'];
Logger.log(email); // Выведет: ivan@example.com

Продвинутые методы работы с ключами

Перебор ключей объекта с использованием цикла for…in

Цикл for...in позволяет перебрать все ключи объекта.

const myObject = { name: 'Иван', age: 30, city: 'Москва' };

for (const key in myObject) {
  if (myObject.hasOwnProperty(key)) { // Проверяем, что ключ принадлежит непосредственно объекту, а не его прототипу
    const value = myObject[key];
    Logger.log(key + ': ' + value);
  }
}

Проверка существования ключа в объекте или массиве (hasOwnProperty, in)

hasOwnProperty(key): Возвращает true, если объект имеет указанный ключ в качестве собственного свойства (не унаследованного).

in: Возвращает true, если указанный ключ существует в объекте (включая унаследованные свойства).

const myObject = { name: 'Иван' };

Logger.log(myObject.hasOwnProperty('name')); // true
Logger.log('name' in myObject); // true
Logger.log(myObject.hasOwnProperty('toString')); // false
Logger.log('toString' in myObject); // true

Динамическое создание и удаление ключей

Ключи можно добавлять и удалять из объектов во время выполнения кода.

const myObject = { name: 'Иван' };

myObject.age = 30; // Добавление ключа 'age'
Logger.log(myObject.age); // 30

delete myObject.name; // Удаление ключа 'name'
Logger.log(myObject.name); // undefined

Практические примеры и советы

Чтение значений ключей из Google Sheets

При чтении данных из Google Sheets каждая строка может быть представлена как объект, где ключами являются заголовки столбцов.

function readDataFromSheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const range = sheet.getDataRange();
  const values = range.getValues();

  const headers = values[0]; // Заголовки столбцов

  for (let i = 1; i < values.length; i++) {
    const rowData = {};
    for (let j = 0; j < headers.length; j++) {
      rowData[headers[j]] = values[i][j];
    }
    Logger.log(rowData['Имя столбца']);
  }
}

Использование ключей для работы с JSON-данными

При работе с JSON-данными, полученными из внешних источников, можно использовать ключи для доступа к конкретным значениям.

const jsonData = '{"name": "Иван", "age": 30}';
const myObject = JSON.parse(jsonData);

Logger.log(myObject.name); // Иван

Рекомендации по именованию ключей для лучшей читаемости кода

Используйте понятные и описательные имена ключей.

Соблюдайте единый стиль именования (например, camelCase или snake_case).

Избегайте использования зарезервированных слов JavaScript в качестве имен ключей.

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

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


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