Menu
Coddy logo textTech

העתקה שטחית והעתקה עמוקה

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-JavaScript של Coddy. שיעור 25 מתוך 65.

בעת העתקת אובייקטים, יש לנו שני סוגי העתקות:

  1. העתקה שטחית - מעתיקה רק את הרמה הראשונה
  2. העתקה עמוקה - מעתיקה את כל הרמות המקוננות

שיטות להעתקה שטחית:

שימוש באופרטור הפריסה:

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 (בלתי תלוי לחלוטין)
challenge icon

אתגר

קל

צרו פונקציה בשם processCart שמקבלת מחרוזת JSON המייצגת עגלת קניות. העגלה מכילה מערך של מוצרים עם שמות ומחירים. המשימה שלכם היא:

  1. לנתח את מחרוזת ה-JSON לאובייקט JavaScript
  2. ליצור ממנה שתי עגלות נפרדות
  3. בעגלה השנייה:
    1. להוסיף לכל פריט מאפיין discounted שערכו false
    2. להחיל הנחה של 10% על כל הפריטים שהערך של price שלהם גדול מ-50
    3. להגדיר את 'discounted' לערך true עבור הפריטים שקיבלו את ההנחה
  4. להחזיר מערך המכיל את שתי העגלות

נסו בעצמכם

function processCart(jsonString) {
    // כתבו כאן קוד
}
// אל תכתבו דבר מחוץ לפונקציה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר JavaScript אונליין