Array.prototype.some()‎

من موسوعة حسوب
مراجعة 18:57، 27 ديسمبر 2017 بواسطة عبد اللطيف ايمش (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

الدالة 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 نعم نعم

مصادر ومواصفات