/**
* Дублирует массив
* Telegram - @ProgrammerForever
*
* @param {Range} arr Массив
* @param {number} count Сколько раз дублировать. По умолчанию 1
* @param {boolean} isFilter Указывает, нужно ли фильтровать строки исходного массива
* @param {number} column Номер столбца по которому надо фильтровать строки. По умолчанию 1.
* @return Дублированный массив
* @customfunction
*/
function array_repeat(arr, count=1, isFilter, column=1) {
if (isFilter){
column = -1+column;
arr = arr.filter(row=>row[column]);
};
// Вариант 1
/*
let outData = [];
for(let i=0; i<=count; i++){
outData = [...outData, ...arr];
};
*/
// Вариант 2, должен работать шустрее
let outData = new Array(arr.length*count);
for(let i=0; i<=arr.length*count; i++){
outData[i]=arr[i%arr.length];
};
return outData;
}
По крайней мере 25к строк выдаёт
Демонстрационная таблица