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);
}