نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر

نوفيل
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
دخولابدأ مجاناً
الرئيسيةالكورساتالتحديات⚔️ المبارزاتالمقالاتالأدواتتغريداتالمجتمع
العودة للتغريدات
سؤالتم الحل

هو أنا ليه لما أعمل Array جديدة من Array قديمة في JS وأعدل فيها القيمة الأصلية بتتغير هي كمان؟

L
lomo
·١٧ يوليو ٢٠٢٦·2 مشاهدة
يا شباب عندي مصفوفة فيها بيانات (زي قائمة أسماء أو منتجات) أخذت منها نسخة في متغيّر جديد عشان أعدل عليها براحتي من غير ما ألمس البيانات الأصلية.
المشكلة اللي مقابلاني: أول ما بغير أي قيمة جوه المصفوفة الجديدة، بلاقي المصفوفة الأصلية اتعدلت هي كمان بنفس الشكل! أنا جربت أعمل كده: const newArr = oldArr; ولما لقيت المشكلة دي بتحصل جربت أعمل Spread Operator كدة: const newArr = [...oldArr]; بس برضه لو المصفوفة فيها Objects جواها، التعديل بيسمّع في الاتنين! هو ليه جافاسكريبت بتعدل في المصفوفة الأصلية مع إنها نُسخة جديدة؟ وإزاي أعمل نسخة مستقلة تماماً (Deep Copy)؟
أسئلة-javascriptنسج-مصفوفة-jsأخطاء-referenceكود-javascriptمفاهيم-jsتطوير-فرونت-اندأساسيات-جافاسكريبت

التعليقات (1)

الحل المعتمد
abdelrahman
abdelrahmanمنذ 90 يوم
في جافاسكريبت، ال (Arrays & Objects) بيتخزنوا في الذاكرة بنظام اسمه By Reference (بالملاذ/العنوان) مش By Value (بالقيمة). لما بتعمل const newArr = oldArr; أنت مش بتاخد نسخة، أنت بتعمل متغيّر جديد بيشاور على نفس العنوان في الذاكرة. لما بتعمل [...oldArr] أنت بتعمل Shallow Copy (نسخة سطحية)، وده معناه إن المصفوفة نفسها جيدة بس الـ Objects اللي جواها لسه بتشاور على نفس العناوين القديمة! في عندك طرق كتير للحل لكن الطريقة الحديثة والقياسية (Recommended): استخدام دالة structuredClone() المدمجة في المتصفحات والـ Node.js الحديثة:
JavaScript
// بتعمل Deep Copy كامل ونظيف جداً
const newArr = structuredClone(oldArr);

// عدّل براحتك هنا ومش هيأثر خالص على oldArr
newArr[0].name = "اسم جديد";

سجّل دخولك لإضافة تعليق

تسجيل الدخول
نوفيل

منصة تعليم البرمجة الأولى بالعربي. تعلم من الصفر حتى الاحتراف مع كورسات احترافية وتحديات ذكاء اصطناعي.

المنصة

  • الكورسات
  • التحديات
  • المقالات
  • الأدوات

الحساب

  • إنشاء حساب
  • تسجيل الدخول
  • لوحة التحكم
  • الملف الشخصي

روابط

  • سياسة الخصوصية
  • شروط الاستخدام
  • عن نوفيل
  • تواصل معنا

© 2026 نوفيل. جميع الحقوق محفوظة.

صُنع بـ في مصر