Функция генерации последовательности чисел в заданном диапазоне

Генератор может выдавать числа диапазона по одному, не создавая массив. Для целых границ используйте шаг +1 или -1 в зависимости от их порядка.

Короткий ответ

Что ответить на собеседовании

Генератор может выдавать числа диапазона по одному, не создавая массив. Для целых границ используйте шаг +1 или -1 в зависимости от их порядка.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию range, принимающую два числовых аргумента и возвращающую все целые числа, находящиеся между ними включительно.

for (let value of range(1, 4)) {
    console.log(value);
}

// 1, 2, 3, 4

Ответ

Генератор может выдавать числа диапазона по одному, не создавая массив. Для целых границ используйте шаг +1 или -1 в зависимости от их порядка.

function* range(start, end) {
  if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end)) {
    throw new TypeError('Границы должны быть безопасными целыми числами');
  }
  const step = start <= end ? 1 : -1;
  for (let value = start; ; value += step) {
    yield value;
    if (value === end) return;
  }
}

range(1, 4) выдаёт 1, 2, 3, 4; range(4, 1) — 4, 3, 2, 1. Равные границы дают один элемент. Это явно выбранная политика для обратного диапазона; память O(1), время пропорционально числу выданных значений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее