Home Reference Source

src/keepIndexed.js

import apply   from './apply';
import keep    from './keep';
import map     from './map';
import partial from './partial';
import range   from './range';

/**
 * インデックスと集合の要素を引数に取る関数を実行した結果がnullでない場合の集合のイテレーターを返します。
 *
 * @param {function} f - インデックスと集合の要素を引数に取る関数
 * @param {*[] | iterator | null} coll - 集合
 *
 * @return {iterator} 関数の実行結果がnullでない場合の集合のイテレーター
 *
 * @example
 * keepIndexed((i, x) => x > 0 ? i : null, [-9 0 29 -7 45 3 -8]);  // [2, 4, 5]のイテレーター
 */
export default function keepIndexed(f, coll) {
  return keep(partial(apply, f), map((i, x) => [i, x], range(), coll));
}