ES 5配列法everyとsome

9717 ワード

Array.prototype.every()


概要

every()メソッド配列のすべての要素が指定された関数のテストに合格したかどうかをテストします.

構文

arr.every(callback[, thisArg])

パラメータ

callback
各要素をテストするための関数です.thisArg
実行callbackの場合に使用するthis値.

説明

everyメソッド配列内の要素ごとに1回callback関数を実行し、callbackfalse(ブール値falseに変換可能な値を示す)を返す要素が見つかるまで.このような要素が見つかった場合、everyメソッドはすぐに戻るfalse.そうでなければcallback各エレメントに対してtrueeveryが戻ってくるtrue.callback割り当てられたインデックスのみに呼び出されます.削除されたインデックスや割り当てられていないインデックスには呼び出されません.callback呼び出し時に3つのパラメータが入力される:要素値、要素のインデックス、元の配列.everyパラメータが1つ提供されている場合thisArgこのパラメータが呼び出しcallbackの場合のthis値です.このパラメータを省略するとcallback呼び出されたときのthis値は、非厳格モードではグローバルオブジェクトとなり、厳格モードではundefinedに入力される.every元の配列は変わらない.every遍歴した要素範囲は初回呼び出しcallbackより前に確定している.呼び出しeveryその後に配列に追加された要素はcallbackアクセスされません.配列に存在する要素が変更された場合、彼らが入力したcallbackの値はevery彼らにアクセスした瞬間の値である.削除された要素または割り当てられていない要素はアクセスされません.

≪インスタンス|Instance|emdw≫


例:すべての配列要素のサイズを検出する


次の例では、配列内のすべての要素が10より大きいかどうかを検出します.
function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true

旧環境との互換性(Polyfill)


第5版では、everyECMA-262規格に追加された.したがって、一部の実装環境ではサポートされていません.この問題を解決するために、元のサポートeveryのない実装環境で使用できるコードをスクリプトの先頭に置くことができます.このアルゴリズムはECMA-262第5版で指定されたアルゴリズムであり、仮定ObjectおよびTypeErrorがそれらの初期値を有し、fun.call等価Function.prototype.callである.
if (!Array.prototype.every)
{
  Array.prototype.every = 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 false;
    }

    return true;
  };
}

Array.prototype.some()


概要

some()メソッド配列の一部の要素が指定された関数のテストに合格したかどうかをテストします.

構文

arr.some(callback[, thisArg])

パラメータ

callback
各要素をテストするための関数です.thisArg
callback実行時に使用するthis値.

説明

some配列内の各要素に対して1回callbackcallbackが「真の値」を返す(ブール値trueに変換できる値)が見つかるまで関数を実行する.このような値が見つかった場合、someすぐに戻るtrue.そうでなければsome戻るfalse.callback「値がある」インデックスのみが呼び出され、削除されたインデックスや割り当てられていないインデックスでは呼び出されません.callback呼び出されたときに3つのパラメータが入力される:要素の値、要素のインデックス、遍歴された配列.someに1つthisArgパラメータが与えられている場合、callbackの値として呼び出されたthisに渡されます.そうでなければ、非厳格モードではグローバルオブジェクトとなり、厳格モードではundefinedとなる.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);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true

旧環境との互換性(Polyfill)


第5版では、someECMA-262規格に追加された.これにより、一部の実装環境ではサポートされない可能性があります.次のコードをスクリプトの先頭に挿入して、この問題を解決することができます.これにより、元のサポートされていない実装環境で使用できます.このアルゴリズムはECMA-262第5版で指定されたアルゴリズムであり、仮定Object およびTypeErrorがそれらの初期値を有し、かつfun.call等価Function.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;
  };
}

まとめ:
の い
every()  true true
some()  true true

&& ||