JavaScript

Array.prototype.some()メソッド

 編集:2022.08.19 by T.A.

その Array の要素をコールバック関数に掛けて結果値でtrueなのがあれば、true を返します。

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

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

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

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

アロー関数による:

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

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

element 現在処理されている要素です。
index 省略可。現在処理されている要素のインデックスです。
array 省略可。some() が実行されている配列です。
thisArg 省略可callback を実行するときに this として使用するオブジェクトです。
戻り値

配列内の少なくとも1つの要素でコールバック関数が真と解釈される値を返した場合は true です。それ以外は false です。

解説

some() は、与えられた callback 関数を、配列に含まれる各要素に対して一度ずつ、callback が真と解釈される値(論理型に変換した際に真となる値)を返す要素が見つかるまで呼び出します。そのような要素が見つかると、some() はただちに true を返します。見つからなかった場合、some() は false を返します。callback は値が代入されている配列の要素に対してのみ呼び出されます。つまり、すでに削除された要素や、まだ値が代入されていない要素に対しては呼び出されません。

callback は、要素の値、要素のインデックス、走査されている Array オブジェクトという 3 つの引数を伴って呼び出されます。

thisArg 引数が some() に与えられると、それがコールバックのの this として使用されます。それ以外は、undefined 値が this として使用されるでしょう。callback が最終的に見ることができる this の値は、関数から見た this の決定に関する一般的なルールによって決定されます。

some() は呼び出された配列を変化させません。

some() によって処理される要素の範囲は、callback が最初に呼び出される前に設定されます。some() の呼び出しが開始された後に追加された要素に対しては、callback は実行されません。既存の配列要素が変更されたり、削除されたりした場合、callback に渡される値は some() がそれらを訪れた時点での値になり、削除された要素を訪問することはありません。

注: このメソッドは空の配列ではあらゆる条件式に対して false を返します。

¶省く

配列要素の値のテスト

次の例は、配列のいずれかの要素が 10 よりも大きいかどうかをテストします。

function isBiggerThan10(element, index, array) {
  return element > 10;
}
D=[2, 5, 8, 1, 4].some(isBiggerThan10);  //=false
D=[12, 5, 8, 1, 4].some(isBiggerThan10); //=true
アロー関数を使った配列要素のテスト

アロー関数 はより短い構文で同じテストを提供します。

D=[2, 5, 8, 1, 4].some(x => x > 10);  //=false
D=[12, 5, 8, 1, 4].some(x => x > 10); //=true
ある値が配列に存在するかどうかのチェック

includes() メソッドを真似て、このカスタム関数は配列にその要素が存在する場合に true を返します。

const fruits = ['apple', 'banana', 'mango', 'guava'];
function checkAvailability(arr, val) {
  return arr.some(function(arrVal) {
    return val === arrVal;
  });
}
D=checkAvailability(fruits, 'kela');   //=false
D=checkAvailability(fruits, 'banana'); //=true

テスト