Array.prototype.includes()‎

من موسوعة حسوب

الدالة Array.prototype.includes()‎ تُحدِّد إن كانت المصفوفة تحتوي على عنصر معيّن، وتُعيد true أو false.

var array1 = [1, 2, 3];

console.log(array1.includes(2)); // true

var pets = ['cat', 'dog', 'bat'];

console.log(pets.includes('cat')); // true

console.log(pets.includes('at')); // false

البنية العامة

arr.includes(searchElement[, fromIndex])

searchElement

العنصر الذي نريد البحث عنه.

fromIndex

الفهرس الذي نريد البدء منه في البحث عن searchElement، والقيم السالبة ستؤدي إلى بدء البحث من الفهرس array.length + fromIndex تصاعديًا. القيمة الافتراضية هي 0.

القيمة المعادة

قيمة منطقية (Boolean).

أمثلة

أمثلة بسيطة عن الدالة includes

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

قيمة fromIndex أكبر أو تساوي عدد عناصر المصفوفة

إذا كانت قيمة الوسيط fromIndex أكبر أو تساوي عدد عناصر المصفوفة (length) فستُعاد القيمة false؛ ذلك لأنَّ المصفوفة غير قابلة للبحث.

var arr = ['a', 'b', 'c'];

arr.includes('c', 3);   // false
arr.includes('c', 100); // false

الفهرس المحسوب أقل من 0

إذا كانت قيمة الوسيط fromIndex سالبةً، فستُستخدَم القيمة المحسوبة (ناتج array.length + fromIndex) لبدء البحث عن القيمة searchElement؛ لكن إذا كان الفهرس المحسوب أقل من الصفر، فستتم عملية البحث في كامل المصفوفة.

// array length : 3
// fromIndex: -100
// computed index: 3 + (-100) = -97

var arr = ['a', 'b', 'c'];

arr.includes('a', -100); // true
arr.includes('b', -100); // true
arr.includes('c', -100); // true

تعويض نقص دعم المتصفحات

أُضيفَت هذه الدالة في إصدار ECMAScript 2015 (أي ES6)، ولا تدعمها جميع المتصفحات بعد، لكن يمكنك الاستعانة بالشيفرة الآتية لتعريفها:

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(searchElement, fromIndex) {

      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      // 1. Let O be ? ToObject(this value).
      var o = Object(this);

      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. If len is 0, return false.
      if (len === 0) {
        return false;
      }

      // 4. Let n be ? ToInteger(fromIndex).
      //    (If fromIndex is undefined, this step produces the value 0.)
      var n = fromIndex | 0;

      // 5. If n ≥ 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

      function sameValueZero(x, y) {
        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
      }

      // 7. Repeat, while k < len
      while (k < len) {
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(searchElement, elementK) is true, return true.
        if (sameValueZero(o[k], searchElement)) {
          return true;
        }
        // c. Increase k by 1. 
        k++;
      }

      // 8. Return false
      return false;
    }
  });
}

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 47 43 غير مدعومة 34 9

على النقيض من متصفح IE، يدعم Edge هذه الميزة بدءًا من الإصدار 14.

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