Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

JavaScript – Array Manipulation

JavaScript - Array Manipulation
JavaScript - Array Manipulation

Array או מערך בשפות תכנות הוא משתנה חכם אשר יכול להחזיק מערך של ערכים שונים. במאמר זה נעבור על המתודות שקיימות בשפת JavaScript לשם ביצוע מניפולציות על מערכים.

כמתכנתים, לעיתים קרובות נאלץ לבצע מניפולציות על מערכים לשם ביצוע פעולות והגעה לתובנות בתוכנית שלנו.
בשפת JavaScript יש מגוון של מתודות שנועדו לעזור לנו בעבודה מול מערכים,
כאשר נוכל לחלק אותן ל-2 קטגוריות עיקריותDestructive ו-Non-Destructive.
לתוך קטגוריית Destructive יפלו כל המתודות שמשנות את המערך המקורי, בעוד שלתוך קטגוריית Non-Destructive יפלו אלו שלא משנות את המערך המקורי אלא מחזירות העתק שלו.

שימו לב שמערך הוא מסוג Reference Type, כלומר שאם נאתחל מערך בשם x, ולאחר מכן ניצור משתנה בשם y אשר כערך ניתן לו את x – מה שיקרה זה ש-y ישב באותו מיקום הזיכרון כמו x, כלומר שאם נשנה משהו באחד מהם – זה ישתנה גם בשני.

Destructive Array Manipulation Methods

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

()push

באמצעות מתודה זו נוכל להכניס ערך נוסף למערך – מסוף המערך.
כלומר שמה שתחזיר לנו המתודה זה את המערך לאחר השינוי.

let purple = 'Purple';
let colors = ['Blue', 'Yellow', 'Red', 'Green'];

colors.push(purple);

console.log(colors); // ['Blue', 'Yellow', 'Red', 'Green', 'Purple']

כפי שתוכלו להבחין, המתודה push צירפה את purple למערך – אחרי האינדקס האחרון של המערך המקורי.

()unshift

מתודה זו היא למעשה ההיפך הגמור מ-push.
באמצעות unshift נוסיף ערך למערךמתחילת המערך, ונקבל בחזרה את המערך שלנו לאחר השינוי.

let purple = 'Purple';
let colors = ['Blue', 'Yellow', 'Red', 'Green'];

colors.unshift(purple);

console.log(colors); // [ 'Purple', 'Blue', 'Yellow', 'Red', 'Green']
()pop

pop היא מתודה דיסטרקטיבית אשר מסירה את האינדקס האחרון מהמערך הנתון – ומחזירה לנו אותו.
אם ננסה לאחר מכן את המערך המקורי, הוא יחזור לאחר שינוי:

let colors = ['Blue', 'Yellow', 'Red', 'Green'];

console.log(colors.pop()); // Green

console.log(colors); // ['Blue', 'Yellow', 'Red']
()shift

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

let colors = ['Blue', 'Yellow', 'Red', 'Green'];

console.log(colors.shift()); // Blue

console.log(colors); // ['Yellow', 'Red', 'Green']

כפי שתוכלו להבחין, גם כאן המערך המקורי השתנה.

()splice

מתודה שימושית זו יכולה לעשות עבורנו 2 דברים ברמת העיקרון –
להסיר ערכים מהמערך או\וגם להוסיף ערכים חדשים למערך במקום אלו שהסרנו.

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

let colors = ['Blue', 'Yellow', 'Red', 'Green', 'Purple', 'Orange'];

colors.splice(2,2); // removes ['Red', 'Green']

console.log(colors); // ['Blue', 'Yellow', 'Purple', 'Orange']

כאשר אנו מעוניינים להשתמש ב-splice על מנת להוסיף ערכים, נפעל כך –
נשלח את 2 הפרמטרים הראשונים כמו מקודם, רק שנוסיף אחריהם כפרמטרים את הערכים שאנו מעוניינים להוסיף במקום.
לא משנה כמה פרמטרים נוסיף, הם יופיעו החל מהאינדקס הראשון שנחתך,
ושארית המערך שלא נחתכה תמוקם מיד אחרי הערכים שהוספנו.

let colors = ['Blue', 'Yellow', 'Red', 'Green', 'Purple', 'Orange'];

colors.splice(2,2, 'Silver'); // removes ['Red', 'Green'], adding 'Silver' instead

console.log(colors); // ['Blue', 'Yellow', 'Silver', 'Purple', 'Orange']

Non-Destructive Array Manipulation Methods

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

()slice

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

שימו לב כי המשמעות של כך היא שהמערך לא חייב להיות מסוג let,
מהסיבה הפשוטה שאין לנו כוונה לשנות אותו – נוכל להצהיר עליו כ-const.

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

 

const colors = ['Blue', 'Yellow', 'Red', 'Green', 'Purple', 'Orange'];

let myColors = colors.slice(2,5); // removes ['Blue', 'Yellow', 'Orange']

console.log(`myColors: ${myColors}`); // new array - ['Red', 'Green', 'Purple']
console.log(`colors: ${colors}`); // orogonal array - ['Blue', 'Yellow', 'Red', 'Green', 'Purple', 'Orange']

כפי שתוכלו להבחין, המערך המקורי לא השתנה.
ולכן אם תריצו את התוכנית, תוכלו לקבל את הפלט הבא:

 JavaScript -Array Manipulation - Slice
JavaScript -Array Manipulation – Slice
()toString

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

const colors = ['Blue', 'Yellow', 'Red', 'Green', 'Purple', 'Orange'];
console.log(colors.toString()); // 'Blue,Yellow,Red,Green,Purple,Orange'
()Join

תבצע פעולה שמזכירה קצת את זו של toString, רק שכאן נוכל לבחור בעצמנו את המפריד במקום פסיקים.
כלומר שאם נשלח לה כפרמטר מחרוזת כזו – ' | ', אז המפריד בין הערכים יהיה – |.

const colors = ['Blue', 'Yellow', 'Red', 'Green', 'Purple', 'Orange'];
console.log(colors.join(' | ')); // 'Blue | Yellow | Red | Green | Purple | Orange'
()concat

ב-concat נוכל להשתמש על מנת לחבר שני מערכים.
את המתודה נפעיל על המערך המקורי, כאשר את המערך הנוסף נשלח כפרמטר למתודה.

let colors = ['Blue', 'Yellow', 'Red', 'Green'];
let moreColors = ['Gray', 'Orange'];

let myColors = colors.concat(moreColors);

console.log(myColors); // ['Blue', 'Yellow', 'Red', 'Green', 'Gray', 'Orange']
()indexOf ו-()lastIndexOf

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

const colors = ['Blue', 'Yellow', 'Red', 'Blue', 'Purple', 'Orange'];
let indexOf1stBlue = colors.indexOf('Blue');
let indexOf2ndBlue = colors.lastIndexOf('Blue');

console.log(`index of 1st Blue: ${indexOf1stBlue}`);
console.log(`index of 2nd Blue: ${indexOf2ndBlue}`);
JavaScript -Array Manipulation - indexOf & lastIndexOf
JavaScript -Array Manipulation – indexOf & lastIndexOf

סיכוםלסיכום ניתן לומר כי JavaScript היא שפה גמישה אשר לה מתודות רבות לשם ביצוע מניפולציות על מערכים.
כמובן שבנוסף לכל המתודות שראינו כאן יש מתודות רבות נוספות, בעלות אופני פעולה שונים,
אך במאמר זה ראינו כיצד פועלות הנפוצות והשמישות ביותר שקיימות.

לקריאה מורחבת על מערכים יש ללחוץ כאן.

רוצים לשתף את המדריך?

אהבתכם את המדריך? פתר לכם תקלה? הזמינו את כותב המדריך לכוס קפה

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

כתיבת תגובה

הזמינו אותי לכוס קפה
buy me coffee

אהבתכם את המדריך? פתר לכם תקלה? הזמינו את כותב המדריך לכוס קפה

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