النسخ السطحي والعميق
جزء من قسم المنطق وتدفق التنفيذ في رحلة JavaScript على Coddy. الدرس 25 من 65.
عند نسخ الكائنات، لدينا نوعان من النسخ:
- نسخة سطحية - تنسخ المستوى الأول فقط
- نسخة عميقة - تنسخ جميع المستويات المتداخلة
طرق النسخ السطحي:
باستخدام عامل النشر:
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() كائن JavaScript إلى سلسلة JSON:
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 (مستقل تمامًا)التحدي
سهلأنشئ دالة باسم processCart تأخذ سلسلة نصية بصيغة JSON تمثل عربة تسوق. تحتوي العربة على مصفوفة من المنتجات بأسمائها وأسعارها. مهمتك هي:
- تحليل سلسلة JSON إلى كائن JavaScript
- إنشاء عربتين منفصلتين منها
- في العربة الثانية:
- إضافة خاصية
discountedإلى كل عنصر، وتعيينها إلى false - تطبيق خصم بنسبة 10% على جميع العناصر التي يكون فيها
priceأكبر من 50 - تعيين 'discounted' إلى true للعناصر التي حصلت على الخصم
- إضافة خاصية
- إرجاع مصفوفة تحتوي على العربتين
جرّب بنفسك
function processCart(jsonString) {
// اكتب الكود هنا
}
// لا تكتب أي شيء خارج الدالةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بالتفصيل
أساسيات السلاسل النصيةالتكرار على السلاسل النصيةالقوالب النصيةدوال السلاسل النصيةمراجعة - ناسج السلاسل النصية4JSON الجزء الثاني
التكرار على عناصر JSONJSON المتداخلالتسلسل الاختياري في JSONالنسخ السطحي والعميقمراجعة - متجر الدراجاتمراجعة - النظام الشمسي2المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة: المصفوفات ثنائية الأبعادجمع المصفوفات وطرحهاالمصفوفات متعرجة الأبعادالمصفوفات ثلاثية الأبعاد وما بعدهاأنماط شائعة للمصفوفات ثنائية الأبعادمراجعة: كل ما يتعلق بالمصفوفات5المجموعات - الجزء الأول
ما هي المجموعة؟التكرار على عناصر المجموعةإضافة عنصرإزالة عنصرالتحقق من وجود عنصرالحجم والتحقق من الفراغالنسخ والمسحمراجعة - أساسيات المجموعات8موضوعات شيقة حول المصفوفات
تفكيك المصفوفاتصياغة الانتشار في المصفوفاتالمصفوفات المتناثرةمراجعة - ورشة عمل حول المصفوفات3JSON الجزء 1
ما هو JSON؟التحقق من وجود المفتاحطرق الكائنعامل الانتشار الجزء 1عامل الانتشار الجزء 2حذف المفاتيحمراجعة - معالجة المفاتيح في JSONتدرّب بنفسك: مترجم JavaScript عبر الإنترنت