Как преобразовать двумерный массив в словарь?
В общем задача
Есть такая таблица с переменными,
данные из которой пользую в коде, вызывая её через именованный диапазон
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 шт):
Обычно, это делается через 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/