Рассматривайте свой код не как набор инструкций и больше как алогритм. В вашем случае для достижения цели предпринимаются следующие шаги:
Обход столбца A
, для каждой [ ячейки ] выполните:
Если [ значение ячейки ] равно "TRP"
, то:
- Получить 4 значения из строки 1, столбцов «R», «V». "," Z "," AD "
- Получить 15 значений из строки в [ строке, соответствующей ячейке ]
- Объединить 1 и 2 в строку, добавить метку времени и добавить к [ лист ]
Вы могли заметить, что:
- Шаг 1 в условии имеет постоянные значения, поэтому его можно повторно использовать из l oop
- «ячейка» и «соответствующая строка», изменяющиеся на каждой итерации, поэтому они могут стать параметрами
Коллекции элементов просматриваются с помощью l oop, повторное использование кода достигается с помощью функций .
Ниже приведена служебная функция для сопоставления начальных данных с желаемым выходом. Вы можете использовать его в al oop для обхода значений столбца «A: A», полученных с помощью getValues()
(вам не нужно каждый раз получать одно значение ячейки, просто расширьте диапазон). Как вы хотите, чтобы это было связано с вами:
const mapRoutine = (rowIdx, constants, rows, callback) => {
const row = rows[rowIdx];
const [
, routine ,, section ,, reps ,,,,
a1 ,, a2 ,, a3 ,, a4 , ...restAttempts
] = row;
//skip odd indices columns starting from attempt 1 (i.e. !(0 % 2) = !0 => true )
const attempts5to12 = restAttempts.filter((a,i) => !(i % 2));
const values = [ routine,section,reps,a1,a2,a3,a4, ...attempts5to12 ];
callback([
...constants.slice(0,-1),
...values,
...constants.slice(-1)
]);
}
//testing:
const rowIndex = 0;
const constants = [1,2,3,4,5];
const firstRow = [,"R",,"S",,"RP",,,,"1",,"2",,"3",,"4","5",,"6",,"7",,"8",,"9",,"10",,"11",,"12"];
mapRoutine(
rowIndex,
constants,
[ firstRow ],
console.log
);
подпись приведенной выше утилиты проста, за исключением последнего параметра, который является функцией - поскольку функции в JavaScript являются первоклассными объекты и, следовательно, могут передаваться как параметры, как и любой другой объект.
В вашем случае callback
может выглядеть примерно так (обратите внимание на currying в последней строке) :
const sheet = //get sheet somehow;
const appendRow = (sheet) => (row) => sheet.appendRow(row);
const curriedAppend = appendRow(sheet); //still a function
Вам необходимо включить более новую среду выполнения V8 , чтобы вышеперечисленное работало