Skip to content

scan (Iterator) ​

イテレータの累積結果を遅延的に生成します。すべての中間結果を出力する reduce のようなものです。

typescript
const accumulated = scan(source, callback, initial);

使用法 ​

scan(source, callback, initial) ​

最終結果だけでなく、畳み込みのすべての中間値が必要なときに scan を使用してください。累計、累積の最大値、ステートマシンなどです。最初に initial の値が出力され、その後、各要素を処理するたびのアキュムレータが続きます。そのため、長さ n の入力からは n + 1 個の値が生成されます。この「scan-left」の動作に相当するネイティブのイテレータヘルパーはありません。

typescript
import { scan } from 'es-toolkit/iterator';

// 初期値から始まる累計です。
scan([1, 2, 3].values(), (acc, x) => acc + x, 0).toArray();
// 結果: [0, 1, 3, 6]

// アキュムレータは要素と異なる型にできます。
scan(['a', 'b'].values(), (acc, x) => acc + x, '').toArray();
// 結果: ['', 'a', 'ab']

パラメータ ​

  • source (Iterator<T>): 累積の対象となるイテレータです。
  • callback ((accumulator: U, value: T, index: number) => U): 現在のアキュムレータ、各要素、そのインデックスとともに呼び出されます。次のアキュムレータを返します。
  • initial (U): アキュムレータの初期値で、最初の値として出力されます。

戻り値 ​

(IteratorObject<U, undefined>): 初期値と、続く各アキュムレータを生成する遅延評価のイテレータです。ネイティブのイテレータヘルパー(map、take、toArray など)をすべて備えているため、そのままチェーンを続けられます。

MIT ライセンスの下で配布されています。