Node.JS | Какой тип функции лучше?

Я рассматривая Python увидел в частых циклах range. Она позволяет несколько раз провести цикл сколько установлено в диапазоне. Я JavaScript-ер, и цикл, бывает, что нужно, повторять в установленном диапазоне, хотя это особо много кода писать:

for (let i = **from**; i < **to**; i += **step**).

А на Python можно реализовать это вот так:

for i in range(**from**, **to**, **step**)

Просто и быстро. Я решил сделать такую функцию на TypeScript, и получилось. Она работала так: спрашивается три аргумента: "from"; "to"; "step", и создаётся массив чисел. Потом с помощью цикла for устанавливается увеличения локальной переменной "i", и это значение записывается в массив. По окончанию цикла, этот массив возвращается. И уже в другой проге где нужно циклить, просто написать:

for (let i of range(**from**, **to**, **step**))

Но потом, я узнал что в JavaScript есть оператор yield, который позволяет сделать генератор. Я написал вторую версию своей функции range и результат не подвёл, всё одинаково. Вторая версия особо похожа на первую, просто в ней нет массива и возврата массива. Итого два кода, выполняющий свою работу с правильным и одинаковым итогом. Но какой из кодов больше предназначен для такой ситуации?

Первый код:

function range(from: number, to?: number, step?: number): number[] {
    to = to ? to : 75000000;
    step = step ? step : 1;

    let array: number[] = [];
    
    for (let i = from; i < to; i += step) {
        array.push(i)
    }

    return array;
}

export default range;

Второй код:

function* range(from: number, to?: number, step?: number) {
    to = to ? to : 75000000;
    step = step ? step : 1;

    for (let i = from; i < to; i += step) {
        yield i;
    }
}

export default range;

Ответы (1 шт):

Автор решения: Aziz Umarov

Предложу такой, но он ближе к первому

function range(from, to, step) {
  return Array.from({length: Math.ceil((to-from)/step)}, (_,i)=> i*step + from);
}

console.log(range(10,20, 1));
console.log(range(10,20, 2));
console.log(range(10,20, 3));

range(10,20, 3).forEach(item=>console.log(item));

→ Ссылка