Array.prototype.find()

by 1 contributor:

This article is in need of an editorial review.

This translation is incomplete. Please help translate this article from English.

これは Harmony(ECMAScript 6) 提案の一部であり、実験段階の技術です。
この技術の仕様は安定していません。ブラウザ互換性の一覧表を確認してください。またこれらの構文や動作は、仕様変更などにより、新しいバージョンのブラウザでは変更される可能性があるという点に注意してください。

概要

配列内の要素が引数の条件の関数を満足するう場合、value を返します。さもなければ、 undefined が返されます。

findIndex() メソッドを参照して下さい。見つかった要素の、値の代わりに、index を返します。

構文

arr.find(callback[, thisArg])

引数

callback
配列内の要素に対して実行する関数、3つの引数を取ります。:
element
配列内で処理される要素
index
配列内で処理される要素のインデックス
array
find がコールされる配列
thisArg
任意. callbackが実行されるときに、thisとして使われるオブジェクト

説明

The find メソッドは、配列内にある要素に対して callbackがtrueを返す要素が見つかるまで、callback 関数を実行します。 そのような要素が見つかったら、findは すぐに その要素の値を返します。さもなければ、 findundefinedを返します。callbackは 値をアサインした配列のインデックスに対してのみ、実行されます。 削除されたり、アサインされていないインデックスに対しては、実行されません。

callbackは3つの引数で実行されます:要素の値、 要素のインデックス、 検索対象の配列

thisArg 引数が指定されたら、 callbackが実行される際にthisとして使用されます。指定されなかったら、undefinedが使用されます。

findは コールされる配列を変更しません。

findによって実行される要素の範囲はcallbackの実行前に設定されます。findでコールされた後に配列に追加れた要素は、callbackによって実行されません。存在していたら、callbackによって配列の要素は変更されます。 callback がtrueを返した際、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第6版仕様に追加され、すべての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;
  };
}

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Array.prototype.find' in that specification.
Standard Initial definition.

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 未サポート 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

関連情報

ドキュメントのタグと貢献者

Contributors to this page: shide55
最終更新者: shide55,
サイドバーを隠す