Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

النسخ السطحي والعميق

جزء من قسم المنطق وتدفق التنفيذ في رحلة JavaScript على Coddy. الدرس 25 من 65.

عند نسخ الكائنات، لدينا نوعان من النسخ:

  1. نسخة سطحية - تنسخ المستوى الأول فقط
  2. نسخة عميقة - تنسخ جميع المستويات nested

أساليب النسخ السطحي:

باستخدام عامل الانتشار:

const original = { a: 1, b: { x: 2 } };
const spreadCopy = { ...original };

استخدام Object.assign() الذي ينشئ كائنًا جديدًا عن طريق نسخ الخصائص من الكائن المصدر إلى الكائن الهدف:

const assignCopy = Object.assign({}, original);

مشكلة النسخ السطحي:

original.b.x = 3;
console.log(spreadCopy.b.x); // 3
// (الكائنات المتداخلة تتشارك المرجع)

console.log(assignCopy.b.x); // 3

فهم أساليب JSON والنسخ العميق

JSON.stringify() يحوّل object في JavaScript إلى JSON من النوع string:

const obj = { name: "John", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // "{"name":"John","age":30}"

تحوّل JSON.parse() سلسلة JSON إلى كائن JavaScript:

const backToObject = JSON.parse(jsonString);
console.log(backToObject); // { name: "John", age: 30 }

النسخ العميق باستخدام JSON:

const original = { a: 1, b: { x: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));

original.b.x = 3;
console.log(deepCopy.b.x); // 2 (مستقل تمامًا)
challenge icon

التحدي

سهل

أنشئ دالةً باسم processCart تأخذ string بتنسيق JSON تمثل عربة تسوق. تحتوي العربة على مصفوفة من المنتجات مع أسمائها وأسعارها. مهمتك هي:

  1. تحليل JSON string إلى JavaScript object
  2. إنشاء عربتي تسوق منفصلتين منه
  3. في العربة الثانية:
    1. إضافة الخاصية discounted إلى كل عنصر وتعيينها إلى false
    2. تطبيق خصم بنسبة 10% على جميع العناصر التي تحتوي على price أكبر من 50
    3. تعيين 'discounted' إلى true للعناصر التي حصلت على الخصم
  4. إرجاع مصفوفة تحتوي على العربتين

جرّب بنفسك

function processCart(jsonString) {
    // اكتب الكود هنا
}
// لا تكتب أي شيء خارج الدالة
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم JavaScript عبر الإنترنت