Как преобразовать двумерный массив в словарь?

В общем задача Есть такая таблица с переменными, исходная таблица

данные из которой пользую в коде, вызывая её через именованный диапазон

var per = SpreadsheetApp.getActiveSpreadsheet().getRange('Переменные').getValues();

и приходится обращаться на прямую задавая соответствующие координаты в массиве

per[1][2] ...

есть потребность унифицировать процесс, что бы можно было обращаться к примеру первичка[1] или как то подобным образом, при необходимости можно поименовать латиницей

знаю подобный метод формирования массива

var parameters = {

    id: ss,
    flag: falg,
    fsheet: namesheet,
    frow: trow,
    fcol: trow,
    val: tval,
    ids: per[11][1]
  };

но как их скрестить не догоняю


Ответы (1 шт):

Автор решения: oshliaer

Обычно, это делается через reduce

введите сюда описание изображения

function myFunction() {
  const book = SpreadsheetApp.getActiveSpreadsheet();
  const variables = book.getRangeByName('Переменные')
    .getValues()
    .reduce((acc, row, i) => ({
      ...acc, [String(row[0]).toLowerCase() || `__row${i}`]: {
        value1: row[1],
        value2: row[2],
      }
    }), {});

  console.log(variables);
  console.log(variables['еще что-то'].value1);
  console.log(variables.и_тут_важное.value2);
}

введите сюда описание изображения

Настоятельно рекомендую:

  • преобразовывать ключи в строки
  • проверять ключи на пустые строки и делать ключи по умлчанию

Таблица https://docs.google.com/spreadsheets/d/1z8nd4WCU0RmiAsKSMlEDsR3TuhXk2eHdkpd2xi3OUZo/edit?usp=sharing

Сниппет преобразования массива в коллекцию https://apps-script-snippets.contributor.pw/snippets/common_js/2darray_to_collection/

→ Ссылка