このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Iterator.prototype.take()
Baseline 2025Newly available
Since March 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
take() はIterator インスタンスのメソッドで、このイテレーター内で指定された数の要素を生成し、その後終了する新しいイテレーターヘルパーオブジェクトを返します。
In this article
構文
take(limit)引数
limit反復処理の先頭から取り出す要素の数です。
返値
新しいイテレーターヘルパーオブジェクトです。返されたイテレーターヘルパーは、元のイテレーターの要素を 1 つずつ生成し、limit の数の要素が生成された場合、または元のイテレーターがすべて処理された場合(next() メソッドが{ value: undefined, done: true } を生成した場合)に、完了します。
例外
例
>take() の使用
次の例では、フィボナッチ数列の項目を反復処理するイテレーターを作成し、最初の 3 つの項目をログ記録します。
function* fibonacci() { let current = 1; let next = 1; while (true) { yield current; [current, next] = [next, current + next]; }}const seq = fibonacci().take(3);console.log(seq.next().value); // 1console.log(seq.next().value); // 1console.log(seq.next().value); // 2console.log(seq.next().value); // undefinedtake() を for...of ループで使用
take() は、イテレーターを手作業で作成しない場合に最も便利です。イテレーターも反復可能オブジェクトであるため、返されたヘルパーをfor...of ループで反復処理することができます。
for (const n of fibonacci().take(5)) { console.log(n);}// ログ出力:// 1// 1// 2// 3// 5fibonacci() は無限イテレーターであるため、早期終了ロジック(break 文など)なしでfor ループを用いて反復処理を行うと、無限ループが発生します。
drop() と take() の組み合わせ
take() をIterator.prototype.drop() と結合すると、イテレーターのスライスを取得することができます。
for (const n of fibonacci().drop(2).take(5)) { // 最初の 2 つの要素を捨て、次の 5 つを取る console.log(n);}// ログ出力:// 2// 3// 5// 8// 13for (const n of fibonacci().take(5).drop(2)) { // 最初の5つの要素を取り、その次の 2 つを捨てる console.log(n);}// ログ出力:// 2// 3// 5取得数の上限と下限
limit が負の数またはNaN であった場合、RangeError が発生します。
fibonacci().take(-1); // RangeError: -1 must be positivefibonacci().take(undefined); // RangeError: undefined must be positivelimit が反復可能オブジェクトの総数よりも大きい場合(Infinity など)、返されたイテレーターヘルパーは、基本的に元のイテレーターと同じ動作をします。
for (const n of new Set([1, 2, 3]).values().take(Infinity)) { console.log(n);}// ログ出力:// 1// 2// 3仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-iterator.prototype.take> |