Генератор может выдавать числа диапазона по одному, не создавая массив. Для целых границ используйте шаг +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), время пропорционально числу выданных значений.