2.5 מערכים תרגול
תרגול - מערכים¶
תרגיל 1 - פעולות בסיסיות¶
בהינתן המערך הבא:
בצעו את הפעולות הבאות (כל פעולה על תוצאת הפעולה הקודמת):
1. הוסיפו "rabbit" לסוף המערך
2. הוסיפו "turtle" לתחילת המערך
3. הסירו את האיבר האחרון
4. הסירו את האיבר הראשון
5. החליפו את "fish" ב-"goldfish"
6. הדפיסו את אורך המערך
7. הדפיסו את האיבר האחרון בעזרת at(-1)
תרגיל 2 - splice¶
בהינתן המערך:
השתמשו ב-splice כדי:
1. להסיר את "green" ו-"blue"
2. להוסיף "orange" ו-"pink" במקום שבו היו "green" ו-"blue"
3. להוסיף "white" בתחילת המערך (בלי unshift - רק splice)
תרגיל 3 - חיפוש¶
בהינתן המערך:
כתבו קוד שמוצא:
1. האם הציון 95 קיים במערך (includes)
2. את האינדקס של הציון 88 (indexOf)
3. את הציון הראשון שגדול מ-90 (find)
4. את האינדקס של הציון הראשון שקטן מ-75 (findIndex)
5. כמה פעמים הציון 95 מופיע (צריך לולאה או לספור ידנית)
תרגיל 4 - sort¶
בהינתן המערך:
א. מיינו מהזול ליקר.
ב. מיינו מהיקר לזול.
בהינתן המערך:
const students = [
{ name: "Charlie", grade: 85 },
{ name: "Alice", grade: 92 },
{ name: "Eve", grade: 78 },
{ name: "Bob", grade: 92 },
{ name: "Diana", grade: 88 }
];
ג. מיינו לפי ציון (מהגבוה לנמוך).
ד. מיינו לפי שם (סדר אלפביתי).
תרגיל 5 - תרגום מפייתון ל-JS¶
תרגמו את הקוד הבא מפייתון לג׳אווהסקריפט:
# Part A - basic operations
numbers = [10, 20, 30, 40, 50]
numbers.append(60)
numbers.insert(0, 5)
last = numbers.pop()
print(f"Last: {last}")
print(f"Length: {len(numbers)}")
print(f"Contains 30: {30 in numbers}")
# Part B - slicing
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
first_three = fruits[:3]
last_two = fruits[-2:]
middle = fruits[1:4]
print(first_three)
print(last_two)
print(middle)
# Part C - list comprehension to find even numbers
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [n for n in nums if n % 2 == 0]
print(evens)
רמז ל-Part C: אין list comprehension ב-JS. השתמשו בלולאה רגילה או ב-filter (אם כבר למדתם).
תרגיל 6 - חיבור ופיצול¶
א. קחו את שני המערכים הבאים ותחברו אותם למערך אחד, עם המספר 0 באמצע:
ב. קחו את המשפט הבא, פצלו אותו למילים, הפכו את סדר המילים, וחברו חזרה למשפט:
תרגיל 7 - הסרת כפילויות¶
כתבו פונקציה removeDuplicates שמקבלת מערך ומחזירה מערך חדש בלי כפילויות:
removeDuplicates([1, 2, 2, 3, 4, 4, 5]); // [1, 2, 3, 4, 5]
removeDuplicates(["a", "b", "a", "c", "b"]); // ["a", "b", "c"]
רמז: השתמשו ב-includes כדי לבדוק אם איבר כבר קיים במערך החדש.
תרגיל 8 - מיזוג ומיון¶
כתבו פונקציה mergeSorted שמקבלת שני מערכים ממוינים ומחזירה מערך ממוין חדש שמכיל את כל האיברים:
mergeSorted([1, 3, 5, 7], [2, 4, 6, 8]); // [1, 2, 3, 4, 5, 6, 7, 8]
mergeSorted([1, 5, 9], [2, 3]); // [1, 2, 3, 5, 9]
mergeSorted([], [1, 2, 3]); // [1, 2, 3]
פתרון פשוט: חברו ומיינו. אתגר: מזגו בלי sort (כמו merge sort).
תרגיל 9 - מטריצה¶
צרו מטריצה 3x3 ו:
1. הדפיסו אותה שורה-שורה
2. חשבו את סכום כל שורה
3. חשבו את סכום האלכסון הראשי (שמאל-עליון לימין-תחתון)
4. בדקו אם מספר מסוים נמצא במטריצה
תרגיל 10 - רשימת מטלות¶
כתבו מערכת רשימת מטלות (todo list) פשוטה באמצעות מערך ופונקציות:
- פונקציה
addTask(tasks, task)- מוסיפה מטלה לסוף הרשימה - פונקציה
removeTask(tasks, index)- מסירה מטלה לפי אינדקס - פונקציה
moveTask(tasks, fromIndex, toIndex)- מזיזה מטלה ממקום למקום - פונקציה
printTasks(tasks)- מדפיסה את כל המטלות עם מספור
דוגמה:
const myTasks = [];
addTask(myTasks, "Learn JavaScript");
addTask(myTasks, "Practice arrays");
addTask(myTasks, "Build a project");
printTasks(myTasks);
// 1. Learn JavaScript
// 2. Practice arrays
// 3. Build a project
moveTask(myTasks, 2, 0); // move "Build a project" to the top
printTasks(myTasks);
// 1. Build a project
// 2. Learn JavaScript
// 3. Practice arrays
שאלות¶
- מה ההבדל בין
sliceל-splice? - למה
[10, 5, 100].sort()נותן[10, 100, 5]ולא[5, 10, 100]? - מה ההבדל בין העתקה שטחית להעתקה עמוקה? מתי צריך העתקה עמוקה?
- מה ההבדל בין
indexOfל-findIndex? - למה
const arr = [1,2,3]; arr.push(4);עובד למרות שהמערך הוגדר עם const?