Array.prototype.some()

by 4 contributors:

概要

与えられた関数によって実行されるテストに合格する要素が配列の中にあるかどうかをテストします。

構文

var someElementPassed = array.some(callback[, thisObject]);

引数

callback
各要素に対してテストを実行する関数。
thisObject
callback を実行するときに this として使用するオブジェクト。

説明

some は、与えられた callback 関数を、配列に含まれる各要素に対して一度ずつ、callback が真の値を返す要素が見つかるまで呼び出します。 真の値を返す要素が見つかると、some メソッドはただちに true を返します。 見つからなかった場合、somefalse を返します。 callback は値が代入されている配列のインデックスに対してのみ呼び出されます。つまり、すでに削除されたインデックスや、まだ値が代入されていないインデックスに対しては呼び出されません。

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

somethisObject パラメータが与えられると、callback の呼び出しのたびにそのオブジェクトが this として使用されます。thisObject が与えられないか null だと、callback に結び付けられたグローバルオブジェクトが代わりに使用されます。

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

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

互換性

some は ECMA-262 標準 に最近追加されたメソッドなので、別の版の標準には存在しない場合があります。次のコードをスクリプトの先頭に追加することにより some がネイティブでサポートされていない実装上でも some が使用可能となります。このアルゴリズムは ECMA-262 第 5 版で指示されたアルゴリズムと全く同じものです。ObjectTypeError はそれぞれオリジナルの値を持ち、またそれらの fun.callFunction.prototype.call のオリジナルの値として評価されます。

if (!Array.prototype.some) {
  Array.prototype.some = function(fun /*, thisp */) {
    "use strict";

    if (this == null) throw new TypeError();

    var t = Object(this),
        len = t.length >>> 0;

    if (typeof fun != "function") throw new TypeError();

    var thisp = arguments[1];

    for (var i = 0; i < len; i++) {
      if (i in t && fun.call(thisp, t[i], i, t))
        return true;
    }

    return false;
  };
}

例: 配列のすべての要素の大きさをテストする

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

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed は false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed は true

ブラウザ実装状況

Kangax's compat tablesに基づく。

機能 Firefox (Gecko) Chrome Internet Explorer Opera Safari
基本サポート (有) (有) 9 (有) (有)
機能 Firefox Mobile (Gecko) Android IE Mobile Opera Mobile Safari Mobile
基本サポート ? ? ? ? ?

関連情報

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

Contributors to this page: teoli, ethertank, Potappo, Shoot
最終更新者: teoli,
サイドバーを隠す