كيفية التكرار على مصفوفة في JavaScript: forEach، for...of وطرق أخرى

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا "التكرار على مصفوفة" هو الأساس الذي يجب حفظه عن ظهر قلب

\n\n

تخيل: لديك قائمة طلاب، سلة مشتريات، أو مجموعة أرقام. تحتاج إلى فعل شيء مع كل عنصر: عرض اسم، حساب مجموع، تصفية البالغين فقط. في JavaScript، هناك عدة طرق للقيام بذلك، وأكثرها شيوعاً هي حلقة forEach.

\n\n

سؤال "Loop (for each) over an array in JavaScript" على Stack Overflow حصد آلاف المشاهدات. هذا يعني أنه حتى المطورين ذوي الخبرة يخلطون أحياناً في التفاصيل الدقيقة. سنقوم بترتيب كل شيء: من for الكلاسيكي إلى for...of الحديث وforEach القوي. ستتعرف متى تستخدم أي طريقة، وستتوقف عن الخوف من المصفوفات.

\n\n

الطريقة رقم 1: حلقة for الكلاسيكية - جد جميع التكرارات

\n\n

الطريقة الأقدم والأكثر وضوحاً. أنت تتحكم في العداد وشرط الخروج بنفسك. مثالية عندما تحتاج إلى إنهاء الحلقة مبكراً أو تخطي عدة عناصر.

\n\n
const fruits = ['تفاح', 'موز', 'برتقال'];
for (let i = 0; i < fruits.length; i++) {
console.log(`فاكهة رقم ${i + 1}: ${fruits[i]}`);
}
\n\n

الإيجابيات: تحكم كامل، يمكن استخدام break و continue.
\nالسلبيات: مطول، سهولة الخطأ في المؤشرات.

\n\n

متى تستخدم for الكلاسيكي

\n
    \n
  • تحتاج إلى إيقاف التكرار مبكراً (مثلاً عند البحث عن عنصر).
  • \n
  • تحتاج إلى الوصول إلى المؤشر (وليس فقط القيمة).
  • \n
  • تعمل مع مصفوفات متعددة الأبعاد.
  • \n
\n\n

الطريقة رقم 2: forEach - ملك الاجتيازات في JavaScript

\n\n

هذه الطريقة هي إجابة سؤال "Loop (for each) over an array in JavaScript" في 90% من الحالات. يتم استدعاؤها مباشرة على المصفوفة وتأخذ دالة رد نداء (callback) يتم تنفيذها لكل عنصر.

\n\n
const fruits = ['تفاح', 'موز', 'برتقال'];
fruits.forEach(function(fruit, index) {
console.log(`فاكهة رقم ${index + 1}: ${fruit}`);
});

// نفس الشيء باستخدام دالة السهم (الأسلوب الحديث):
fruits.forEach((fruit, index) => {
console.log(`فاكهة رقم ${index + 1}: ${fruit}`);
});
\n\n

هام: forEach لا يُرجع مصفوفة جديدة (على عكس map). هو ببساطة ينفذ إجراءً لكل عنصر. ونعم، break و continue لا يعملان هنا - إذا كنت بحاجة لإنهاء الحلقة، استخدم for...of أو for الكلاسيكي.

\n\n

معاملات دالة رد النداء لـ forEach

\n
    \n
  • المعامل الأول - العنصر الحالي في المصفوفة (إلزامي).
  • \n
  • المعامل الثاني - مؤشر العنصر (اختياري).
  • \n
  • المعامل الثالث - المصفوفة نفسها (نادراً ما يُحتاج).
  • \n
\n\n
[10, 20, 30].forEach((value, index, array) => {
console.log(`العنصر ${value} في الموضع ${index} في المصفوفة [${array}]`);
});
\n\n

الطريقة رقم 3: for...of - حديث وأنيق

\n\n

ظهر في ES6 (2015) وأحبّه المطورون فوراً. يعمل ليس فقط مع المصفوفات، بل مع أي كائنات قابلة للتكرار (سلاسل نصية، Set، Map).

\n\n
const fruits = ['تفاح', 'موز', 'برتقال'];
for (const fruit of fruits) {
console.log(`فاكهة: ${fruit}`);
}
\n\n

الميزة الرئيسية: يمكن استخدام break و continue. وأيضاً الكود يبدو نظيفاً وقابلاً للقراءة.

\n\n

كيفية الحصول على المؤشر في for...of

\n

إذا كنت بحاجة إلى المؤشر، استخدم طريقة entries():

\n\n
for (const [index, fruit] of fruits.entries()) {
console.log(`فاكهة رقم ${index + 1}: ${fruit}`);
}
\n\n

الطريقة رقم 4: map - عندما تحتاج لإنشاء مصفوفة جديدة

\n\n

إذا كنت لا تريد فقط التكرار، بل تحويل كل عنصر والحصول على مصفوفة جديدة بنفس الطول، استخدم m

المدونات

توصيات الكتب