النسخ السطحي والعميق
جزء من قسم المنطق وتدفق التنفيذ في رحلة JavaScript على Coddy. الدرس 25 من 65.
عند نسخ الكائنات، لدينا نوعان من النسخ:
- نسخة سطحية - تنسخ المستوى الأول فقط
- نسخة عميقة - تنسخ جميع المستويات 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 (مستقل تمامًا)التحدي
سهلأنشئ دالةً باسم processCart تأخذ string بتنسيق JSON تمثل عربة تسوق. تحتوي العربة على مصفوفة من المنتجات مع أسمائها وأسعارها. مهمتك هي:
- تحليل JSON string إلى JavaScript object
- إنشاء عربتي تسوق منفصلتين منه
- في العربة الثانية:
- إضافة الخاصية
discountedإلى كل عنصر وتعيينها إلى false - تطبيق خصم بنسبة 10% على جميع العناصر التي تحتوي على
priceأكبر من 50 - تعيين 'discounted' إلى true للعناصر التي حصلت على الخصم
- إضافة الخاصية
- إرجاع مصفوفة تحتوي على العربتين
جرّب بنفسك
function processCart(jsonString) {
// اكتب الكود هنا
}
// لا تكتب أي شيء خارج الدالةيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
أساسيات السلاسل النصيةالتكرار عبر السلاسل النصيةTemplate Literalsدوال السلاسل النصيةمراجعة - String Weaver4JSON الجزء الثاني
التكرار عبر JSONJSON المتداخلالتسلسل الاختياري في JSONالنسخ السطحي والعميقمراجعة - متجر الدراجاتمراجعة - النظام الشمسي2المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفات ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادجمع وطرح المصفوفاتالمصفوفات المتعرجة (Jagged Arrays)المصفوفات ثلاثية الأبعاد وما بعدهاأنماط المصفوفات ثنائية الأبعاد الشائعةمراجعة - كل شيء عن المصفوفات5المجموعات - الجزء الأول
ما هي المجموعة؟التكرار عبر المجموعاتإضافة عنصرإزالة عنصرالتحقق من وجود عنصرالحجم وهل هي فارغةالنسخ والمسحملخص - أساسيات المجموعات8مواضيع شيقة حول الـ Arrays
تفكيك الـ Arrayاستخدام الـ Spread Syntax في الـ Arraysالـ Sparse Arraysمراجعة - ورشة عمل الـ Arrays3JSON الجزء الأول
ما هو JSON؟التحقق من وجود المفتاحObject MethodsSpread Operator الجزء الأولSpread Operator الجزء الثانيحذف المفاتيحمراجعة - معالجة مفاتيح JSONتدرّب بنفسك: مترجم JavaScript عبر الإنترنت