.some()

some()メソッドは配列内の要素が提供された関数によって実装されるテストをパスするか否かをテストします。

文法

arr.some(callback[, thisArg])
引数 説明
callback 各要素をテストする関数を指定します。
thisArg callback実行時にthisとして使用する値を指定します。

説明

someは、callback関数がtrue値を返すものが見つかるまで、 各配列内の各要素をcallback関数を実行します。 もし該当する要素が見つかれば、someは即座にtrueを返し、 そうで無ければfalseを返します。 callbackは値が割り当てられた配列のインデックスでのみ実行され、 削除または値が割り当てられていないインデックスでは実行されません。

callbackは、要素の値、要素のインデックス、巡っている配列自身の3つの引数を使用して実行されます。

somethisArgパラメーターが提供された場合、 callback実行時に、そのthis値として使用されるものとして渡されます。 提供されなければ、undefined値がthisとして渡されます。 callbackによって最終的に供給されるthis値は、 関数によるthisの取り扱いの通常の規則に沿って決定されます。

someは呼び出し元の配列を変更しません。

someによって処理される要素の範囲は、callbackの最初の呼び出しの直前に設定されます。 someの呼び出しが行われた後に追加された要素は、callbackの対象になりません。 もし、対象とならない要素がcallbackによって変更された場合、 そのcallbackに渡される値は、someがその要素のインデックスに訪れた時の値になり、 削除されていれば、その要素は対象外になります。(翻訳に自信なし)

例: 配列要素の値を検証

下記のサンプルは、配列内のいずれかの要素が10以上であるかを検証しています。

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

passed = [12, 5, 8, 1, 4].some(isBigEnough);
// 結果: true

Polyfill

someは、5thエディションのECMA-262標準に追加されたため、 全ての標準実装に提供されていないかもしれません。 あなたのスクリプトが始まる前に下記のコードを挿入することで、 ネイティブにサポートされていない場合に、someが使用出来るようになります。 このアルゴリズムは5thエディションのECMA-262標準の仕様と一致するもので、 ObjectTypeErrorはそれらの元の値、 fun.callFunction.prototype.callの元の値を評価するものとみなします。

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

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== 'function')
      throw new TypeError();

    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
      if (i in t && fun.call(thisArg, t[i], i, t))
        return true;
    }

    return false;
  };
}

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本 1.5 (1.8) 9
モバイル
機能 Android Chrome for
Android
Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本 1.0 (1.8)

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。