Home Reference Source

src/keep.js

/**
 * 集合の要素を引数に取る関数を実行した結果がnullでない場合の集合のイテレーターを返します。
 *
 * @param {function} f - 集合の要素を引数に取る関数
 * @param {*[] | iterator | null} coll - 集合
 *
 * @return {iterator} 関数の実行結果がnullでない場合の集合のイテレーター
 *
 * @example
 * keep(x => x > 0 ? x * 2 : null, [-9 0 29 -7 45 3 -8]);  // [58, 90, 6]のイテレーター
 */
export default function* keep(f, coll) {
  for (const x of coll) {
    const fx = f(x);

    if (fx !== null && fx !== undefined) {
      yield fx;
    }
  }
}