Посмотрите на генераторы:
function* range(from, to) {
for (var i=from; i<to; i++)
yield i;
}
function* paddedRange(from, to) {
const length = (to-1).toString(10) + 1 /* at least one pad */;
for (const i of range(from, to))
yield i.padStart(length, '0');
}
console.log(Array.from(paddedRange(2, 12)));
Вы также можете встроить цикл из range
в paddedRange
или сделать так, чтобы он возвращал массив напрямую:
function paddedRange(from, to) {
const length = (to-1).toString(10) + 1 /* at least one pad */;
return Array.from(range(from, to), i => i.padStart(length, '0'));
}
console.log(paddedRange(2, 12));
Основным упрощением является то, что вы должны вычислять длину заполнения только один раз и давать ей денотативное имя, вместо того, чтобы снова вычислять ее для каждого числа. Также диапазоны обычно задаются их нижним и верхним концом, а не их началом и длиной, но вы можете легко переключиться назад, если вам понадобится последний по какой-то причине.