Home Reference Source

src/repeat.js

/**
 * 値を繰り返す集合のイテレーターを返します。
 *
 * @param {*[]} args - [n, x]か[x]
 *
 * @return {iterator} 集合のイテレーター
 *
 * @example
 * repeat(   0);  // [0, 0, 0...]のイテレーター
 * repeat(3, 0);  // [0, 0, 0]のイテレーター
 */
export default function* repeat(...args) {
  const [n, x] = (() => {
    switch (args.length) {
    case 0:
      throw "Invalid arguments";

    case 1:
      return [Infinity, args[0]];

    default:
      return args;
    }
  })();

  for (let i = 0; i < n; ++i) {
    yield x;
  }
}