פרק 19: Data Structures (מבני נתונים) ב-JavaScript

1. מה הם מבני נתונים (Data Structures)?

מבני נתונים הם דרכים לארגון, אחסון וניהול של נתונים בצורה יעילה כדי שניתן יהיה לגשת אליהם ולעבוד איתם בצורה מיטבית. ב-JavaScript קיימים כמה מבני נתונים חשובים, כמו מערכים (Arrays), אובייקטים (Objects), Maps, Sets, ועוד. לכל מבנה נתונים יש תכונות ייחודיות שמתאימות לשימושים שונים.

2. Arrays (מערכים)

מערך (Array) הוא מבנה נתונים שמאפשר לאחסן רשימה של ערכים באינדקסים מסודרים. המערך ב-JavaScript יכול להכיל ערכים מכל סוג, כולל מספרים, מחרוזות, אובייקטים, ופונקציות.

דוגמה לשימוש במערך:

let numbers = [10, 20, 30, 40, 50];

console.log(numbers[0]); // מציג 10
console.log(numbers.length); // מציג 5 (אורך המערך)

פעולות נפוצות במערכים:

  • הוספת ערך לסוף המערך: push
  • הסרת ערך מהסוף: pop
  • הוספת ערך לתחילת המערך: unshift
  • הסרת ערך מההתחלה: shift

דוגמה:

let fruits = ["Apple", "Banana"];
fruits.push("Orange");  // מוסיף את "Orange" לסוף המערך
console.log(fruits);    // מציג ["Apple", "Banana", "Orange"]

fruits.shift();         // מסיר את "Apple" מהתחלה
console.log(fruits);    // מציג ["Banana", "Orange"]

3. Objects (אובייקטים)

אובייקט (Object) הוא מבנה נתונים שמאפשר לאחסן זוגות של מפתח ו-ערך. כל מפתח הוא ייחודי ויכול להכיל כל סוג של ערך (מספרים, מחרוזות, פונקציות, וכו').

דוגמה לשימוש באובייקט:

let person = {
    name: "Alice",
    age: 30,
    city: "New York"
};

console.log(person.name); // מציג "Alice"
console.log(person["age"]); // מציג 30

פעולות נפוצות באובייקטים:

  • הוספת מפתח חדש: פשוט מציינים את המפתח והערך.
  • מחיקת מפתח: שימוש במילת המפתח delete.

דוגמה:

let car = {
    brand: "Toyota",
    model: "Corolla"
};

car.year = 2020;  // הוספת מפתח חדש
console.log(car); // מציג { brand: "Toyota", model: "Corolla", year: 2020 }

delete car.model; // מחיקת המפתח "model"
console.log(car); // מציג { brand: "Toyota", year: 2020 }

4. Maps (מפות)

Map הוא מבנה נתונים שמאפשר לאחסן זוגות של מפתח-ערך בדיוק כמו אובייקט, אבל יש לו כמה יתרונות:

  • ניתן להשתמש בכל סוג של ערך כמפתח (לא רק מחרוזות).
  • הסדר שבו הנתונים נשמרים הוא לפי הסדר שבו הם נוספו.

יצירת Map:

let map = new Map();

// הוספת זוגות מפתח-ערך
map.set("name", "Alice");
map.set(1, "one");

console.log(map.get("name")); // מציג "Alice"
console.log(map.get(1));      // מציג "one"
console.log(map.size);        // מציג 2 (מספר האיברים ב-Map)

פעולות נפוצות ב-Map:

  • set: הוספה או עדכון של ערך עבור מפתח מסוים.
  • get: קבלת הערך לפי המפתח.
  • delete: הסרת ערך לפי מפתח.
  • has: בדיקה אם קיים מפתח מסוים.

דוגמה:

let map = new Map();
map.set("name", "Bob");
map.set("age", 25);

console.log(map.has("name")); // מציג true
map.delete("age");           // מסיר את המפתח "age"
console.log(map.size);        // מציג 1

5. Sets (קבוצות)

Set הוא מבנה נתונים שמאפשר לאחסן ערכים ייחודיים בלבד. כלומר, לא ניתן לאחסן את אותו הערך פעמיים ב-Set.

יצירת Set:

let set = new Set();

// הוספת ערכים
set.add(1);
set.add(2);
set.add(2); // הערך הזה לא יתווסף כי הוא כבר קיים

console.log(set.size); // מציג 2
console.log(set.has(1)); // מציג true (הערך 1 קיים)

פעולות נפוצות ב-Set:

  • add: הוספת ערך חדש.
  • delete: הסרת ערך.
  • has: בדיקה אם ערך קיים.
  • clear: ניקוי כל הערכים ב-Set.

דוגמה:

let set = new Set([1, 2, 3, 4]);

set.add(5);            // הוספת ערך חדש
set.delete(2);         // הסרת הערך 2
console.log(set.has(3)); // מציג true
console.log(set.size);   // מציג 4

6. WeakMap ו-WeakSet

WeakMap ו-WeakSet הם גרסאות "חלשות" של Map ו-Set ב-JavaScript. ההבדל המרכזי הוא שהערכים והמפתחות ב-WeakMap ו-WeakSet הם אובייקטים בלבד, והם לא מונעים מהאובייקטים המופנים אליהם להימחק על ידי מנקה הזיכרון (Garbage Collector) כאשר אין להם עוד הפניות.

WeakMap דוגמה:

let weakMap = new WeakMap();
let obj = {};

weakMap.set(obj, "Some Value");

console.log(weakMap.get(obj)); // מציג "Some Value"

WeakSet דוגמה:

let weakSet = new WeakSet();
let obj = {};

weakSet.add(obj);

console.log(weakSet.has(obj)); // מציג true

הסבר:

  • ב-WeakMap וב-WeakSet, האובייקטים מתנהגים בצורה "חלשה" יותר, והם יימחקו אוטומטית אם אין עוד הפניות אליהם.

7. דוגמה מלאה: שימוש במבני נתונים

נבנה דוגמה שמשתמשת במבני נתונים שונים לניהול רשימת פריטים, מידע על עובדים, וקבוצות ייחודיות.

// שימוש במערך לאחסון רשימת פריטים
let items = ["Item1", "Item2", "Item3"];
items.push("Item4"); // הוספת פריט חדש למערך
console.log(items); // מציג ["Item1", "Item2", "Item3", "Item4"]

// שימוש באובייקט לאחסון מידע על עובד
let employee = {
    name: "John",
    position: "Developer",
    salary: 60000
};
console.log(employee.name + " earns $" + employee.salary + " per year.");

// שימוש ב-Map לניהול נתונים גמישים
let employeeMap = new Map();
employeeMap.set(1, { name: "Alice", position: "Manager" });
employeeMap.set(2, { name: "Bob", position: "Engineer" });

console.log(employeeMap.get(1)); // מציג { name: "Alice", position: "Manager" }

// שימוש ב-Set לאחסון ערכים ייחודיים
let uniqueNumbers = new Set([1, 2, 3, 3, 4]);
uniqueNumbers.add(5);
console.log(uniqueNumbers); // מציג Set { 1, 2, 3, 4, 5 }

הסבר:

  • השתמשנו במערך (Array) לאחסון רשימת פריטים.
  • השתמשנו באובייקט (Object) כדי לאחסן מידע על עובד מסוים.
  • יצרנו Map לניהול רשימה של עובדים עם מזהים ייחודיים.
  • השתמשנו ב-Set כדי לשמור על קבוצה של מספרים ייחודיים, ללא כפילויות.

סיכום

בפרק זה למדנו על:

  1. Arrays: מבנה נתונים לאחסון רשימות מסודרות של ערכים.
  2. Objects: מבנה נתונים לאחסון זוגות של מפתחות וערכים.
  3. Maps: מבנה נתונים מתקדם יותר לאחסון זוגות מפתח-ערך, שבו המפתחות יכולים להיות מכל סוג.
  4. Sets: מבנה נתונים לאחסון ערכים ייחודיים בלבד.
  5. WeakMap ו-WeakSet: מבנים המתמקדים באובייקטים עם טיפול בזיכרון אוטומטי (garbage collection).
Scroll to Top
דילוג לתוכן