ES 5配列法everyとsome
9717 ワード
Array.prototype.every()
概要
every()
メソッド配列のすべての要素が指定された関数のテストに合格したかどうかをテストします.
構文
arr.every(callback[, thisArg])
パラメータ
callback
各要素をテストするための関数です.thisArg
実行callback
の場合に使用するthis
値.
説明
every
メソッド配列内の要素ごとに1回callback
関数を実行し、callback
false(ブール値falseに変換可能な値を示す)を返す要素が見つかるまで.このような要素が見つかった場合、every
メソッドはすぐに戻るfalse
.そうでなければcallback
各エレメントに対してtrue
、every
が戻ってくる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版では、every
ECMA-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回callback
callbackが「真の値」を返す(ブール値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版では、some
ECMA-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
&& ||
arr.every(callback[, thisArg])
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
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;
};
}
概要
some()
メソッド配列の一部の要素が指定された関数のテストに合格したかどうかをテストします.構文
arr.some(callback[, thisArg])
パラメータ
callback
各要素をテストするための関数です.
thisArg
callback実行時に使用する
this
値.説明
some
配列内の各要素に対して1回callback
callbackが「真の値」を返す(ブール値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版では、
some
ECMA-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
&& ||