Array.prototype.every()
الدالة Array.prototype.every()
تختبر إذا كانت جميع عناصر المصفوفة تحقق الاختبار المُحدَّد من قِبل الدالة المعنية.
function isBelowThreshold(currentValue) {
return currentValue < 40;
}
var array1 = [1, 30, 39, 29, 10, 13];
console.log(array1.every(isBelowThreshold)); // true
البنية العامة
arr.every(callback[, thisArg])
callback
الدالة التي ستختبر كل عنصر من عناصر المصفوفة، وتقبل ثلاثة وسائط.
currentValue
العنصر الحالي الذي يُعالِج في المصفوفة، وهذه القيمة مطلوبة.
index
فهرس العنصر الحالي في المصفوفة، وهذه القيمة اختيارية.
array
المصفوفة التي استدعيت الدالة every
عليها، وهذه القيمة اختيارية.
thisArg
القيمة التي ستُستخدَم في this
عند استدعاء الدالة callback
، وهي قيمة اختيارية.
القيمة المعادة
true
إذا أعادت الدالة true
لكل عناصر المصفوفة، وإلا فستعيد false
.
الوصف
الدالة every
تُنفِّذ الدالة callback
في كل عنصر موجود في المصفوفة حتى تجد عنصرًا يُعيد القيمة false
من الدالة callback
، فعند وجود ذلك العنصر فستُعيد الدالة every
القيمة false
مباشرةً؛ وإذا أعادت الدالة callback
القيمة true
لجميع العناصر، فستُعيد الدالة every
القيمة true
. لاحظ أنَّ الدالة callback
ستُستدعى على الفهارس التي لها قيمٌ مسندةٌ إليها فقط، فهي لن تستدعى للفهارس التي حُذِفَت أو التي لم تُسنَد إليها قيم.
ستستدعى الدالة callback
مع تمرير ثلاثة وسائط إليها: قيمة العنصر، وفهرسه، وكائن المصفوفة التي ستُختَبر عناصرها.
إذا وفّرنا المعامل thisArg
إلى الدالة every
، فسيستخدم كقيمة this
داخل الدالة callback
، وإن لم نُحدِّد له قيمةً فستستعمل القيمة undefined
.
لاحظ أنَّ الدالة every
لا تغيّر المصفوفة التي تستدعى عليها بأيّ شكلٍ من الأشكال.
أمثلة
اختبار القيمة الرقمية لجميع عناصر المصفوفة
المثال الآتي يختبر إن كانت جميع عناصر المصفوفة أكبر من العدد 10:
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44]. every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
استخدام الدوال السهمية
توفِّر الدوال السهمية طريقةً مختصرةً لإجراء نفس الاختبار:
[12, 5, 8, 130, 44]. every(x => x >= 10); // false
[12, 54, 18, 130, 44].every(x => x >= 10); // true
تعويض نقص دعم المتصفحات
أضيفت هذه الدالة في الإصدار الخامس من معيار ECMAScript، لذا يمكنك استخدام الشيفرة الآتية لإضافتها للمتصفحات التي لا تدعمها:
f (!Array.prototype.every) {
Array.prototype.every = function(callbackfn, thisArg) {
'use strict';
var T, k;
if (this == null) {
throw new TypeError('this is null or not defined');
}
// 1. Let O be the result of calling ToObject passing the this
// value as the argument.
var O = Object(this);
// 2. Let lenValue be the result of calling the Get internal method
// of O with the argument "length".
// 3. Let len be ToUint32(lenValue).
var len = O.length >>> 0;
// 4. If IsCallable(callbackfn) is false, throw a TypeError exception.
if (typeof callbackfn !== 'function') {
throw new TypeError();
}
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
if (arguments.length > 1) {
T = thisArg;
}
// 6. Let k be 0.
k = 0;
// 7. Repeat, while k < len
while (k < len) {
var kValue;
// a. Let Pk be ToString(k).
// This is implicit for LHS operands of the in operator
// b. Let kPresent be the result of calling the HasProperty internal
// method of O with argument Pk.
// This step can be combined with c
// c. If kPresent is true, then
if (k in O) {
// i. Let kValue be the result of calling the Get internal method
// of O with argument Pk.
kValue = O[k];
// ii. Let testResult be the result of calling the Call internal method
// of callbackfn with T as the this value and argument list
// containing kValue, k, and O.
var testResult = callbackfn.call(T, kValue, k, O);
// iii. If ToBoolean(testResult) is false, return false.
if (!testResult) {
return false;
}
}
k++;
}
return true;
};
}
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | 9 | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.