find() メソッドは、配列内の要素が指定されたテスト関数を満たす場合、配列内の 値 を返します。そうでない場合は undefined を返します。
findIndex() メソッドも参照してください。このメソッドは、配列内で見つかった要素の値ではなく、インデックス を返します。
構文
arr.find(callback[, thisArg])
引数
callback- 配列内の各要素に対して実行する関数です。3 個の引数を取ります:
element- 配列内で現在処理されている要素。
index- 配列内で現在処理されている要素のインデックス。
arrayfindを呼び出した元の配列。
thisArg- 任意。
callbackが実行される時にthisとして使われるオブジェクト。
説明
find メソッドは、callback 関数が true を返す要素が見つかるまで、配列内の各要素に対して callback 関数を実行します。そのような要素が見つかると、find はすぐにその要素の値を返します。配列内に見つからなければ、find は undefined を返します。callback 関数は、値が割り当てられた配列のインデックスに対してのみ実行されます。 削除されたものや割り当てられていないインデックスに対しては実行されません。
callback は、要素の値、要素のインデックス、検索される Array オブジェクトの 3 個の引数で呼び出されます。
find に thisArg 引数を与えた場合、各 callback の呼び出し時に、その与えたオブジェクトが、this として使用されます。この引数を省略した場合、this は undefined になります。
find は、呼び出した配列を変更 (mutate) しません。
find によって処理される要素の範囲は callback の最初の呼び出し前に設定されます。find を呼び出した後に追加された配列の要素は、callback の実行対象になりません。既存のまだ処理されていない配列要素が callback により変更された場合、それが callback に渡されると、find がその要素のインデックスにアクセスした時点の値になります。削除された要素は処理の対象になりません。
例
配列内の素数を検索する
次の例は、配列内の素数を探します (配列内に素数が見つからない場合は undefined を返します)。
function isPrime(element, index, array) {
var start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) {
return false;
}
}
return element > 1;
}
console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5
互換コード
このメソッドは、ECMAScript 2015 仕様に追加されており、すべての JavaScript 実装環境で使用できるとは限りません。しかし、次のコードスニペットで Array.prototype.find を使用できます。
if (!Array.prototype.find) {
Array.prototype.find = function(predicate) {
if (this === null) {
throw new TypeError('Array.prototype.find called on null or undefined');
}
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i < length; i++) {
value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return value;
}
}
return undefined;
};
}
仕様
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 45.0 | 25.0 (25.0) | 未サポート | 未サポート | 7.1 |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基本サポート | 未サポート | 未サポート | 25.0 (25.0) | 未サポート | 未サポート | iOS 8 |