JavaScript

Array.prototype.find()メソッド

 編集:2022.08.18 by T.A.

その Array の要素をコールバック関数に掛けて処理でtrueだった最初の要素を返します。

コールバック関数による:

arr.forEach(callback[, thisArg])
関数部:
function 関数名(element[, index[, array]]){
 処理
}

インラインコールバック関数による:

arr.find(function(element[, index[, array]]){処理}[, thisArg])

アロー関数による:

arr.find( (element[, index[, array]]) => {処理})
arr Arrayオブジェクト
callback 実行する関数名を記述。
関数名 callbackと同じ名前を記述。
処理 処理プログラム。必ずreturnで評価結果を返す。

アロー関数使用の場合、「{ }」に囲まれていない場合は評価式となります。

element 配列内で現在処理されている要素です。
index 省略可。配列内で現在処理されている要素の添字(位置)です。
array 省略可。find を呼び出した元の配列です。
thisArg 省略可。callback 内で this として使われるオブジェクトです。
戻り値

配列の中で、提供されたテスト関数を満足する最初の要素の値です。見つからなかった場合は undefined を返します。

解説

find メソッドは、配列のそれぞれの添字に対して一度ずつ、callback 関数を実行し、callback 関数が truthy な値を返すまで繰り返します。その場合、find は直ちにその要素の値を返します。そうでなければ、find は undefined を返します。

callback は、値が割り当てられているものに限らず、配列中のすべての添字に対して呼び出されます。すなわち、疎配列では値が割り当てられているもののみを呼び出すメソッドに比べて効率的ではないことを意味します。

thisArg 引数が find に与えられた場合、callback の呼び出しのたびに、その内部で this 値として使用されます。この引数を省略した場合は undefined が使用されます。

find は、呼び出した配列を変更(mutate)しませんが、callback で提供された関数は変更する可能性があります。その場合、find によって処理される各要素は、最初に callback が呼び出される前に設定されます。したがって:

注意

¶省く

配列内のオブジェクトをプロパティの一つで検索:

const inventory = [
  {name:'apples', quantity:2},
  {name:'bananas', quantity:0},
  {name:'cherries', quantity:5}
];
function isCherries(fruit) {
  return fruit.name === 'cherries';
}
D=inventory.find(isCherries); //={ name:'cherries', quantity:5 }

アロー関数と分割の使用:

const inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'cherries', quantity: 5}
];
const result = inventory.find( ({ name }) => name === 'cherries' );
D=result; //={ name: 'cherries', quantity: 5 }

配列内の素数の検索:

次の例は、配列内の素数を探します(配列内に素数が見つからない場合は undefined を返します)。

function isPrime(element, index, array) {
  let start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}
D=[4, 6, 8, 12].find(isPrime); //=undefined。見つからなかった
D=[4, 5, 8, 12].find(isPrime); //=5

¶省く


テスト