JSFiddle - React, Tailwind, and code Playground
by yshrkn
JavaScript
function makeRangeIterator(start = 0, end = Infinity, step = 1) {
let nextIndex = start;
let count = 0;
let returned = false;
const result = {};
result[Symbol.iterator] = () => {
const iterator = {};
iterator.next = () => {
let iteratorResult;
if (nextIndex < end) {
iteratorResult = { value: nextIndex, done: false };
nextIndex += step;
count += 1;
} else if (!returned) {
iteratorResult = { value: count, done: true };
returned = true;
} else {
iteratorResult = { done: true };
}
return iteratorResult;
};
return iterator;
};
return result;
};
const iterator = makeRangeIterator(1, 10, 2); // 1から10の範囲を2とばしで取得するイテレータ
for (let v of iterator) {
console.log(v);
}