Home Reference Source

src/filter.js

import sequence from './sequence';

/**
 * 集合から条件を満たす要素を抽出し、その要素の集合のイテレーターを返します。
 *
 * @param {function} pred - 条件
 * @param {*[] | iterator | null} coll - 集合
 *
 * @return {iterator} 抽出された要素の集合のイテレーター
 *
 * @example
 * filter(x => x % 2 === 0, iterate(inc, 1));  // [2, 4, 6, 8, ...]のイテレーター
 */
export default function* filter(pred, coll) {
  for (const x of sequence(coll)) {
    if (pred(x)) {
      yield x;
    }
  }
}