String.prototype.indexOf()‎

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

الدالة String.prototype.indexOf()‎ تُعيد الفهرس الموجود ضمن كائن String الذي يستدعي الدالة والذي يكون موضع أوّل مُطابَقة للقيمة المُحدَّدة لهذه الدالة بدءًا من fromIndex، أو القيمة ‎-1 إن لم يُعثَر عليها.

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

str.indexOf(searchValue[, fromIndex])

searchValue

السلاسل النصية التي نريد البحث عنها ومعرفة فهرسها.

fromIndex

قيمة اختيارية، وهي عددٌ صحيحٌ يُمثِّل الفهرس الذي سيبدأ البحث منه، والقيمة الافتراضية هي 0. إذا كانت قيمة fromIndex أقل من 0 أو أكبر من str.length، فسيبدأ البحث عند الفهرس 0 أو str.length على التوالي وبالترتيب.

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

فهرس موضع أوّل مطابَقة للسلسلة النصية searchValue، أو القيمة ‎-1 إن لم يُعثَر عليها.

الوصف

تُرقَّم المحارف من بداية السلسلة النصية (أي من اليسار إلى اليمين في لغات LTR مثل الإنكليزية، ومن اليمين إلى اليسار في لغات RTL مثل العربية)، ويكون فهرس أوّل محرف هو 0، ومحرف آخر عنصر هو str.length -1.

'Blue Whale'.indexOf('Blue');     //  0
'Blue Whale'.indexOf('Blute');    // -1
'Blue Whale'.indexOf('Whale', 0); //  5
'Blue Whale'.indexOf('Whale', 5); //  5
'Blue Whale'.indexOf('Whale', 7); // -1
'Blue Whale'.indexOf('');         //  0
'Blue Whale'.indexOf('', 9);      //  9
'Blue Whale'.indexOf('', 10);     // 10
'Blue Whale'.indexOf('', 11);     // 10

لاحظ أنَّ الدالة indexOf()‎ حساسةٌ لحالة الأحرف، أي أنَّ التعبير الآتي سيُعيد القيمة ‎-1:

'Blue Whale'.indexOf('blue'); // -1

التحقق من وجود سلسلة نصية

لاحظ أنَّ القيمة 0 لا تتحوّل إلى true والقيمة -1 لن تتحول إلى false؛ وبالتالي إذا أردنا التحقق من وجود سلسلة نصية داخل سلسلة نصية أخرى، فعلينا كتابة الشيفرة الآتية:

'Blue Whale'.indexOf('Blue') !== -1; // true
'Blue Whale'.indexOf('Bloe') !== -1; // false

انظر إلى الدالة String.prototype.includes()‎، فهي تعمل نفس عمل الشيفرة السابقة، لكنها أُضيفَت إلى معيار ECMAScript 2015.

أمثلة

استخدام indexOf()‎ و lastIndexOf()‎

المثال الآتي يوظِّف الدالتين indexOf()‎ و lastIndexOf()‎ لتحديد مواضع القيم في السلسلة النصية "Brave new world":

var anyString = 'Brave new world';

console.log('The index of the first w from the beginning is ' + anyString.indexOf('w'));
// 8
console.log('The index of the last w from the beginning is ' + anyString.lastIndexOf('w'));
// 10

console.log('The index of "new" from the beginning is ' + anyString.indexOf('new'));
// 6
console.log('The index of "new" from the end is ' + anyString.lastIndexOf('new'));
// 6

حساسية حالة الأحرف

المثال الآتي يُعرِّف سلسلتين نصيتين، اللتان تحتويا على العبارة نفسها لكن مع بعض الاختلافات بحالة الأحرف. لاحظ من الناتج أنَّ الدالة indexOf()‎ حساسة لحالة الأحرف:

var myString    = 'brie, pepper jack, cheddar';
var myCapString = 'Brie, Pepper Jack, Cheddar';

console.log('myString.indexOf("cheddar") is ' + myString.indexOf('cheddar'));
// 19
console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf('cheddar'));
// -1

إحصاء عدد مرات تكرار أحد المحارف

يمكننا استخدام الدالة indexOf()‎ لمعرفة كم مرّة تكرر المحرف في السلسلة النصية، وذلك بإنشاء متغير باسم count الذي يحتوي على عدد مرات تكرار المحرف e في السلسلة النصية str، وباستخدام المعامل fromIndex:

var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');

while (pos !== -1) {
  count++;
  pos = str.indexOf('e', pos + 1);
}

console.log(count); // 4

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

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي نعم نعم نعم نعم نعم

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