Home Reference Source

src/takeLast.js

import sequence from './sequence';

/**
 * 集合の末尾n個の要素のイテレーターを返します。
 *
 * @param {number} n - 取得する要素の数
 * @param {*[] | iterator | null} coll - 集合
 *
 * @return {iterator} 末尾n個の要素の集合のイテレーター
 *
 * @example
 * takeLast(3, range(10));  // [7, 8, 9]のイテレーター
 */
export default function takeLast(n, coll) {
  const xs = [];

  for (const x of sequence(coll)) {
    xs.push(x);

    if (xs.length > n) {
      xs.shift();
    }
  }

  return sequence(xs);
}