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.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).