Menu
CoddyTech

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

جزء من قسم المنطق وتدفق التنفيذ في رحلة 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 عبر الإنترنت