Можно держать указатель на очередной элемент паттерна удаления.
И знать ближайшую следующую позицию под удаление.
В цикле идти по элементам исходного массива. Когда дошли до позиции под удаление, обновить указатель и следующую позицию, и никак не использовать значение. А иначе копировать текущий элемент в результат.
const arr = Array.from({ length: 50 }, (_, i) => i); // [0, 1, 2, 3, ... 49]
const pattern = [2, 5, 1, 2];
const result = [];
for (let i = 0, patternIndex = 0, toDeleteIndex = pattern[0] - 1; i < arr.length; i++) {
if (i === toDeleteIndex) {
patternIndex = (patternIndex + 1) % pattern.length; // 0, 1, 2, 3, 0, 1, 2, 3, ...
toDeleteIndex += pattern[patternIndex];
} else {
result.push(arr[i]);
}
}
console.log(result.join(', '));
// 0, 2, 3, 4, 5, 8, 10, 12, 13, 14, 15, 18, 20, 22, 23, 24, 25, 28, 30, 32, 33, 34, 35, 38, 40, 42, 43, 44, 45, 48
Такое задумывалось?