Iterator.prototype.find()

Limited availability

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

find()Iterator インスタンスのメソッドで、 Array.prototype.find() に似ています。イテレーターが生成する要素のうち、指定された試験関数を満たす最初のものを返します。試験関数を満たす値がない場合は、 undefined を返します。

構文

js
find(callbackFn)

引数

callbackFn

このイテレーターが生成するすべての要素に対して実行する関数です。真値を返すと、一致する要素が見つかったことを示し、偽値はそ腕はないことを示します。この関数は、以下の引数とともに呼び出されます。

element

処理中の現在の要素です。

index

処理中の現在の要素のインデックスです。

返値

イテレーターが生成する要素のうち、指定された試験関数を満たす最初のものです。試験関数を満たす値がない場合は、 undefined を返します。

解説

find() はイテレーターを反復処理し、各要素に対して一度ずつ callbackFn 関数を呼び出します。 コールバック関数が真値を返した場合、その要素をただちに返します。 そうでない場合は、イテレーターの終わりまで反復処理を続け、undefined を返します。 find() が要素を返した場合、その元となるイテレーターは return() メソッドを呼んで閉じられます。

イテレーターヘルパーの主な利点は、配列メソッドよりも「遅延的」であるということです。つまり、要求されたときにのみ次の値を生成するという意味です。これにより、不必要なコンピューター処理を避けることができ、また、無限イテレーターでも使用することができます。無限イテレーターでは、 find() は最初の該当要素が見つかった時点でそれを返します。 callbackFn が常に偽値を返す場合、このメソッドは終了しません。

find() の使用

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

const isEven = (x) => x % 2 === 0;
console.log(fibonacci().find(isEven)); // 2

const isNegative = (x) => x < 0;
console.log(fibonacci().take(10).find(isNegative)); // undefined
console.log(fibonacci().find(isNegative)); // Never completes

find() を呼び出すと、メソッドが途中で返った場合でも、常にその元となるイテレーターが閉じられます。イテレーターが未完了の状態で残されることはありません。

js
const seq = fibonacci();
console.log(seq.find(isEven)); // 2
console.log(seq.next()); // { value: undefined, done: true }

仕様書

Specification
Iterator Helpers
# sec-iteratorprototype.find

ブラウザーの互換性

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
find

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.

関連情報