Array.prototype.lastIndexOf()
الدالة Array.prototype.lastIndexOf()
تعيد آخر فهرس للعنصر الموجود في الدالة والذي يساوي القيمة المُحدَّدة، أو القيمة -1 إن لم يُعثَر على مُطابَقة.
var animals = ['Dodo', 'Tiger', 'Penguin', 'Dodo'];
console.log(animals.lastIndexOf('Dodo')); // 3
console.log(animals.lastIndexOf('Tiger')); // 1
البنية العامة
arr.indexOf(searchElement[, fromIndex])
searchElement
العنصر الذي نريد البحث عنه.
fromIndex
الفهرس الذي نريد البدء منه في البحث عن searchElement
، والقيم السالبة ستؤدي إلى بدء البحث من الفهرس array.length + fromIndex
تصاعديًا. القيمة الافتراضية هي 0.
القيمة المعادة
آخر فهرس للعنصر الذي عُثَر عليه، أو -1 إذا لم يعثر على مطابقة.
الوصف
الدالة indexOf
تُقارِن searchElement
بعناصر المصفوفة باستخدام معامل المطابقة (أي ===
).
أمثلة
استخدام lastIndexOf
المثال الآتي يستخدم الدالة lastIndexOf
للعثور على قيم في المصفوفة:
var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
العثور على جميع الفهارس التي تحتوي على العنصر المحدد
var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var element = 'a';
var idx = array.lastIndexOf(element);
while (idx != -1) {
indices.push(idx);
idx = (idx > 0 ? array.lastIndexOf(element, idx - 1) : -1);
}
console.log(indices);
// [4, 2, 0]
لاحظ أنَّنا تعاملنا مع الحالة idx == 0
بطريقة مختلف هنا، لأنَّ العنصر سيُعثَر عليه بغض النظر عن قيمة المعامل fromIndex
وذلك إذا كان أوّل عنصر في المصفوفة؛ وهذا يختلف عن الدالة indexOf
.
تعويض نقص دعم المتصفحات
أضيفت الدالة lastIndexOf
في الإصدار الخامس من معيار ECMAScript، لذا يمكنك استخدام الشيفرة الآتية لإضافة دعم لهذه الدالة إن لم تكن متوافرةً في المتصفح:
// Production steps of ECMA-262, Edition 5, 15.4.4.15
// Reference: http://es5.github.io/#x15.4.4.15
if (!Array.prototype.lastIndexOf) {
Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {
'use strict';
if (this === void 0 || this === null) {
throw new TypeError();
}
var n, k,
t = Object(this),
len = t.length >>> 0;
if (len === 0) {
return -1;
}
n = len - 1;
if (arguments.length > 1) {
n = Number(arguments[1]);
if (n != n) {
n = 0;
}
else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k >= 0; k--) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
};
}
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | 9 | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.