Iterator.prototype.drop()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

drop()Iterator インスタンスのメソッドで、新しいイテレーターヘルパーオブジェクトを返します。これは、このイテレーターの開始位置から指定した数の要素を読み飛ばします。

構文

js
drop(limit)

引数

limit

反復処理の先頭から削除する要素の数です。

返値

新しいイテレーターヘルパーオブジェクトです。 返されたイテレーターヘルパーの next() メソッドが最初に呼び出されると、現在のイテレーターは limit 要素分だけ即座に進められ、次の要素(limit+1 番目の要素)が返されます。その後、イテレーターヘルパーは残りの要素を順に返します。現在のイテレーターが limit 未満の数の要素しか保有していない場合、新しいイテレーターヘルパーは、 next() が最初に呼び出された時点で即座に処理が完了します。

例外

RangeError

limit整数に変換する際に、 NaN または負の数になった場合に発生します。

drop() の使用

次の例では、フィボナッチ数列の項を反復処理するイテレーターを作成します。最初の 2 項を省略し、 3 番目の項から開始します。

js
function* fibonacci() {
  let current = 1;
  let next = 1;
  while (true) {
    yield current;
    [current, next] = [next, current + next];
  }
}

const seq = fibonacci().drop(2);
console.log(seq.next().value); // 2
console.log(seq.next().value); // 3

これは次のものと同等です。

js
const seq = fibonacci();
seq.next();
seq.next();

drop() を for...of ループで使用

drop() は、イテレーターを手作業で作成しない場合に最も便利です。イテレーターも反復可能オブジェクトであるため、返されたヘルパーを for...of ループで反復処理することができます。

js
for (const n of fibonacci().drop(2)) {
  console.log(n);
  if (n > 30) {
    break;
  }
}

// Logs:
// 2
// 3
// 5
// 8
// 13
// 21
// 34

drop() と take() の組み合わせ

drop()Iterator.prototype.take() を組み合わせることで、イテレーターの一部を取得することができます。

js
for (const n of fibonacci().drop(2).take(5)) {
  // 最初の 2 つの要素を削除し、次の 5 つを抽出する
  console.log(n);
}
// Logs:
// 2
// 3
// 5
// 8
// 13

for (const n of fibonacci().take(5).drop(2)) {
  // 最初の 5 つの要素を抽出し、次の 2 つを削除する
  console.log(n);
}
// Logs:
// 2
// 3
// 5

削除数の下限と上限

limit が負の数か NaN であった場合、 RangeError が発生します。

js
fibonacci().drop(-1); // RangeError: -1 must be positive
fibonacci().drop(undefined); // RangeError: undefined must be positive

limit が反復処理で生成可能な要素の総数よりも大きい場合(Infinity など)、返された反復処理ヘルパーは、 next() が最初に呼び出されたときに、すべての要素を即座に破棄して完了します。現在の反復処理が無限である場合、返された反復処理ヘルパーは、決して完了しません。

js
fibonacci().drop(Infinity).next(); // 終了しない
new Set([1, 2, 3]).values().drop(Infinity).next(); // { value: undefined, done: true }
new Set([1, 2, 3]).values().drop(4).next(); // { value: undefined, done: true }

仕様書

Specification
Iterator Helpers
# sec-iteratorprototype.drop

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
drop

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
See implementation notes.
Has more compatibility info.

関連情報