عند العمل مع المصفوفات، قد ترغب أحيانًا في تنفيذ كود لكل قيمة في المصفوفة. ويُسمّى هذا التكرار على المصفوفة أو الدوران عليها.
سننظر هنا في الحالة التي لا ترغب فيها بتعديل المصفوفة أثناء ذلك. أما لتحويل المصفوفات، فراجع مفهوم تحويلات المصفوفات بدلًا من ذلك.
for
أبسط أسلوب للتكرار على مصفوفة هو استخدام حلقة for، انظر مفهوم حلقات for.
const numbers = [6.0221515, 10, 23];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
// => 6.0221515
// => 10
// => 23
for...of
عندما ترغب في التعامل مع القيمة مباشرة في كل تكرار ولا تحتاج إلى الفهرس إطلاقًا، يمكنك استخدام حلقة for...of.
تعمل حلقة for...of مثل حلقة for الأساسية الموضّحة أعلاه، لكن بدلًا من التعامل مع الفهرس كمتغير في الحلقة، تُمنح القيمة مباشرة.
const numbers = [6.0221515, 10, 23];
// Because re-assigning number inside the loop will be very
// confusing, disallowing that via const is preferable.
for (const number of numbers) {
console.log(number);
}
// => 6.0221515
// => 10
// => 23
وكما في حلقات for العادية، يمكنك استخدام continue لإيقاف التكرار الحالي وbreak لإيقاف تنفيذ الحلقة تمامًا.
forEach
تتضمن كل مصفوفة طريقة forEach يمكن استخدامها للمرور على عناصر المصفوفة.
تقبل forEach دالة استدعاء راجعة كمعامل.
تُستدعى دالة الاستدعاء الراجعة مرة واحدة لكل عنصر في المصفوفة.
ويُمرَّر إلى الدالة العنصر الحالي وفهرسه والمصفوفة كاملة كوسائط.
وغالبًا ما يُستخدم العنصر الحالي أو الفهرس فقط.
const numbers = [6.0221515, 10, 23];
numbers.forEach((number, index) => console.log(number, index));
// => 6.0221515 0
// => 10 1
// => 23 2
لا يمكنك إيقاف التكرار بعد بدء حلقة forEach.
ولا وجود للعبارتين break وcontinue في هذا السياق.
بصفتها ساحرة ناشئة، تحتاج Elyse إلى تحليل مجموعة أوراقها بطرق مختلفة عديدة. ولتبسيط الأمور، لا تستخدم إلا أوراقًا تحمل القيم من 1 إلى 10.
تريد Elyse أن تعرف عدد الأوراق التي لديها من نوع معيّن في مجموعتها.
اكتب دالة cardTypeCheck تأخذ معاملين: مصفوفة أوراق (مجموعة Elyse) ونوع الورقة المطلوب عدّها.
ينبغي أن تستخدم الدالة forEach وأن تُرجع عدد الأوراق من النوع المحدّد في المجموعة.
const cardType = 3;
cardTypeCheck([1, 2, 3, 4], cardType);
// => 1
من أجل حيلة أخرى، تحتاج Elyse إلى معرفة عدد الأوراق الفردية أو الزوجية في مجموعتها.
نفّذ دالة determineOddEvenCards تأخذ معاملين: مصفوفة أوراق (مجموعة Elyse)، وقيمة منطقية (صحيح تقابل "الزوجي"، وخطأ تقابل "الفردي").
ينبغي أن تُرجع هذه الدالة عددًا واحدًا: عدد الأوراق الفردية أو الزوجية (بناءً على قيمة الوسيط الثاني) في المجموعة.
للتدريب، استخدم هذه المرة حلقة for...of في تنفيذ الدالة.
determineOddEvenCards([1, 2, 3, 1, 5, 6], true);
// => 2
determineOddEvenCards([1, 2, 3, 1, 5, 6], false);
// => 4
سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.