كيفية تكرار كائن في JavaScript: من المبتدئ إلى المحترف
\n\nيواجه كل مطور عاجلاً أم آجلاً مهمة: "كيف يمكنني المرور عبر جميع خصائص الكائن؟". السؤال شائع جداً لدرجة أنه حصد آلاف المشاهدات ومئات الإجابات على Stack Overflow. وهذا ليس مفاجئاً - فالكائنات في JavaScript هي أساس كل شيء: من الإعدادات إلى البيانات القادمة من الخادم.
\n\nفي هذا البرنامج التعليمي، سنستعرض جميع الطرق الأساسية لتكرار كائن في JavaScript، من الطرق الكلاسيكية إلى الأساليب الحديثة. ستتعرف على متى تستخدم for...in، وما الذي يجعل Object.keys أفضل، وكيف يبسط Object.entries الحياة. هيا بنا!
التحضير: إنشاء كائن اختباري
\n\nلجعل الأمثلة واضحة، سنأخذ كائن مستخدم بسيط:
\n\nconst user = {\n name: 'آنا',\n age: 28,\n city: 'موسكو',\n isAdmin: false\n};\n\nمهمتنا هي عرض جميع المفاتيح والقيم. دعنا نرى الأدوات المتاحة في ترسانة JavaScript.
\n\n1. حلقة for...in - الكلاسيكية
\n\nأقدم وأبسط طريقة لتكرار خصائص الكائن. ظهرت في ES3 وتعمل في جميع المتصفحات.
\n\nfor (let key in user) {\n console.log(key + ': ' + user[key]);\n}\n// name: آنا\n// age: 28\n// city: موسكو\n// isAdmin: false\n\nملاحظة مهمة: for...in لا يكرر الخصائص الخاصة فقط، بل أيضاً الخصائص الموروثة عبر النموذج الأولي. لتصفيتها، استخدم hasOwnProperty:
for (let key in user) {\n if (user.hasOwnProperty(key)) {\n console.log(key + ': ' + user[key]);\n }\n}\n\nنادراً ما تحتوي الكائنات الحديثة على خصائص نموذج أولي زائدة، لكن عادة التحقق باستخدام hasOwnProperty ستحميك من الأخطاء عند العمل مع المكتبات.
2. Object.keys() - النهج الحديث
\n\nتقوم طريقة Object.keys() بإرجاع مصفوفة من المفاتيح الخاصة بالكائن. هذا يتخلص من مشاكل النماذج الأولية ويمنحك الوصول إلى جميع طرق المصفوفات.
const keys = Object.keys(user);\nconsole.log(keys); // ['name', 'age', 'city', 'isAdmin']\n\nkeys.forEach(key => {\n console.log(key + ': ' + user[key]);\n});\n\nالمزايا:
\n- \n
- يعمل فقط مع الخصائص الخاصة (غير الموروثة) \n
- يعيد مصفوفة - يمكن استخدام
forEach،map،filter\n - كود قابل للقراءة ويمكن التنبؤ به \n
هذه هي طريقتي المفضلة عندما أحتاج فقط إلى الحصول على قائمة المفاتيح والعمل معها.
\n\n3. Object.values() - عندما تحتاج فقط إلى القيم
\n\nأحياناً نهتم فقط بقيم الخصائص، دون المفاتيح. على سبيل المثال، للتجميع أو عرض البيانات.
\n\nconst values = Object.values(user);\nconsole.log(values); // ['آنا', 28, 'موسكو', false]\n\nvalues.forEach(value => {\n console.log(value);\n});\n\nظهرت هذه الطريقة في ES2017 وهي مناسبة تماماً للعمل مع مجموعات البيانات حيث لا أهمية للمفاتيح.
\n\n4. Object.entries() - ملك الطرق
\n\nObject.entries() يعيد مصفوفة من المصفوفات، حيث كل مصفوفة داخلية هي زوج [مفتاح, قيمة]. هذه أداة متعددة الاستخدامات لتكرار كائن في JavaScript.
const entries = Object.entries(user);\nconsole.log(entries);\n// [\n// ['name', 'آنا'],\n// ['age', 28],\n// ['city', 'موسكو'],\n// ['isAdmin', false]\n// ]\n\nentries.forEach(([key, value]) => {\n console.log(`${key}: ${value}`);\n});\n\nلاحظ التفكيك في معاملات forEach: ([key, value]). هذا يجعل الكود نظيفاً وموجزاً.
متى تستخدم:
\n- \n
- تحتاج إلى كل من المفاتيح والقيم \n
- تريد تحويل الكائن إلى هيكل آخر (مثل Map) \n
- تكتب دوال