Iterator.prototype.reduce()
Baseline
2025
Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
reduce() は Iterator インスタンスのメソッドで、 Array.prototype.reduce と似ています。イテレーターによって生成されたそれぞれの要素に対して、ユーザーが指定した「縮約」コールバック関数を実行し、前の要素の計算結果を返値として渡します。すべての要素に対して縮約を実行した最終結果は、単一の値となります。
構文
reduce(callbackFn)
reduce(callbackFn, initialValue)
引数
callbackFn-
イテレーターによって生成される各要素に対して実行される関数。その返値は、次の
callbackFnの反復処理においてaccumulator引数の値とみなされます。最後の反復処理では、返値はreduce()の返値となります。この関数は、次の引数とともに呼び出されます。accumulator-
前回
callbackFnを呼び出した際に得られた値。最初の呼び出しでは、後者が指定されている場合はその値がinitialValueとなり、そうでない場合はイテレーターの最初の要素がその値となります。 currentValue-
現在の要素の値。最初の呼び出しでは、
initialValueを指定している場合はその値がイテレーターの最初の要素となり、指定していない場合は 2 つ目の要素となります。 currentIndex-
currentValueのインデックス位置。最初の呼び出しでは、initialValueを指定した場合はその値が0、指定しない場合は1となります。
initialValue省略可-
コールバックが最初に呼び出された時点で
accumulatorが初期化される値。initialValueが指定されている場合、callbackFnは最初の要素をcurrentValueとして実行を開始します。initialValueが指定されていない場合、accumulatorは最初の要素で初期化され、callbackFnは 2 つ目の要素をcurrentValueとして実行を開始します。 この場合、イテレーターが空の場合(つまり、accumulatorとして返す最初の値がない場合)、エラーが発生します。
返値
「縮約」コールバック関数をイテレーター全体に対して完全に実行した結果の値です。
例外
TypeError-
イテレーターに要素が含まれておらず、
initialValueが指定されていない場合に発生します。
解説
reduce() がどのように動作するのかの詳細については、 Array.prototype.reduce() を参照してください。 他のほとんどのイテレーターヘルパーメソッドとは異なり、これは遅延的ではないため、無限イテレーターでは動作しません。
例
>reduce() の使用
次の例では、フィボナッチ数列の項目を生成するイテレーターを作成し、最初の 10 項目を合計します。
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
console.log(
fibonacci()
.take(10)
.reduce((a, b) => a + b),
); // 143
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-iterator.prototype.reduce> |
ブラウザーの互換性
Loading…