Array.prototype.some()
الدالة Array.prototype.some()
تختبر إذا كان أحد عناصر المصفوفة على الأقل يحقق الاختبار المُحدَّد من قِبل الدالة المعنية.
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4]. some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
البنية العامة
arr.some(callback[, thisArg])
callback
الدالة التي ستختبر كل عنصر من عناصر المصفوفة، وتقبل ثلاثة وسائط.
currentValue
العنصر الحالي الذي يُعالِج في المصفوفة، وهذه القيمة مطلوبة.
index
فهرس العنصر الحالي في المصفوفة، وهذه القيمة اختيارية.
array
المصفوفة التي استدعيت الدالة every
عليها، وهذه القيمة اختيارية.
thisArg
القيمة التي ستُستخدَم في this
عند استدعاء الدالة callback
، وهي قيمة اختيارية.
القيمة المعادة
true
إذا أعادت الدالة true
لأحد عناصر المصفوفة، وإلا فستعيد false
.
الوصف
الدالة some
تُنفِّذ الدالة callback
في كل عنصر موجود في المصفوفة حتى تجد عنصرًا يُعيد القيمة false
من الدالة callback
، فعند وجود ذلك العنصر فستُعيد الدالة every
القيمة false
مباشرةً؛ وإذا أعادت الدالة callback
القيمة true
لجميع العناصر، فستُعيد الدالة some
القيمة true
. لاحظ أنَّ الدالة callback
ستُستدعى على الفهارس التي لها قيمٌ مسندةٌ إليها، فهي لن تستدعى للفهارس التي حُذِفَت أو التي لم تُسنَد إليها قيم.
ستستدعى الدالة callback
مع تمرير ثلاثة وسائط إليها: قيمة العنصر، وفهرسه، وكائن المصفوفة التي ستُختَبر عناصرها.
إذا وفّرنا المعامل thisArg
إلى الدالة some
، فسيستخدم كقيمة this
داخل الدالة callback
، وإن لم نُحدِّد له قيمةً فستستعمل القيمة undefined
.
لاحظ أنَّ الدالة some
لا تغيّر المصفوفة التي تستدعى عليها بأيّ شكلٍ من الأشكال.
أمثلة
اختبار القيمة الرقمية لعناصر المصفوفة
المثال الآتي يختبر إن كان أحد عناصر المصفوفة أكبر من العدد 10:
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4]. some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
اختبار القيمة الرقمية لعناصر المصفوفة باستخدام الدوال السهمية
توفِّر الدوال السهمية طريقةً مختصرةً لإجراء نفس الاختبار:
[2, 5, 8, 1, 4]. some(x => x > 10); // false
[12, 5, 8, 1, 4].some(x => x > 10); // true
التحقق من وجود قيمة ما في المصفوفة
لمحاكاة عمل الدالة includes
، يمكننا استخدام الدالة المخصصة الآتية التي تُعيد true
إذا كان العنصر موجودًا في المصفوفة:
var fruits = ['apple', 'banana', 'mango', 'guava'];
function checkAvailability(arr, val) {
return arr.some(function(arrVal) {
return val === arrVal;
});
}
checkAvailability(fruits, 'kela'); // false
checkAvailability(fruits, 'banana'); // true
التحقق من وجود قيمة ما في المصفوفة باستخدام الدوال السهمية
var fruits = ['apple', 'banana', 'mango', 'guava'];
function checkAvailability(arr, val) {
return arr.some(arrVal => val === arrVal);
}
checkAvailability(fruits, 'kela'); // false
checkAvailability(fruits, 'banana'); // true
تحويل أيّ قيمة إلى قيمة منطقية
var TRUTHY_VALUES = [true, 'true', 1];
function getBoolean(value) {
'use strict';
if (typeof value === 'string') {
value = value.toLowerCase().trim();
}
return TRUTHY_VALUES.some(function(t) {
return t === value;
});
}
getBoolean(false); // false
getBoolean('false'); // false
getBoolean(1); // true
getBoolean('true'); // true
تعويض نقص دعم المتصفحات
أضيفت هذه الدالة في الإصدار الخامس من معيار ECMAScript، لذا يمكنك استخدام الشيفرة الآتية لإضافتها للمتصفحات التي لا تدعمها:
// Production steps of ECMA-262, Edition 5, 15.4.4.17
// Reference: http://es5.github.io/#x15.4.4.17
if (!Array.prototype.some) {
Array.prototype.some = function(fun/*, thisArg*/) {
'use strict';
if (this == null) {
throw new TypeError('Array.prototype.some called on null or undefined');
}
if (typeof fun !== 'function') {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
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 | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | 9 | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.