תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

סידור מערכים של JavaScript באמצעות הפונקציה sort

מחבר:
בתאריך:

זה המדריך הרביעי בסדרה שמוקדשת ללימוד פונקציות של JavaScript שפועלות על מערכים. המדריכים הקודמים טיפלו בפונקציות:

  • foreach שהיא דרך אלגנטית לכתוב לולאה של JavaScript.
  • סינון מערכים ב JavaScript-באמצעות הפונקציה filter
  • טרנספורמציה של מערכים ב-JavaScript באמצעות הפונקציה map

sort מאפשר לנו לסדר מערך לפי סדר. לדוגמה, לסדר פריטים של מערך מספרים מערך גבוה לנמוך. או הפוך.

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

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

 

מיון מערכים ב-Javascript באמצעות sort

 

הפונקציה המשווה

הפונקציה המשווה, compareFunction, מקבלת שני פרמטרים, שנהוג לכנות a ו-b. כך זה נראה בתחביר הפשוט:

function compareFunction(a, b){
    // compare code
}

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

בתחביר ES6 ניתן לכתוב את הפונקציה באופן מקוצר יותר:

let compareFunction = (a, b) => { // compare code }

 

סידור מערך מספרים לפי סדר

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

let compareFunction = (a,b) => a - b
let myNumbers = [22,1,8,4,17];
myNumbers.sort(compareFunction);
console.log(myNumbers); // [1, 4, 8, 17, 22]
  • הפעלנו את הפונקציה sort על המערך myNumbers.
  • הפונקציה sort קראה לפונקציה compareFunction שמשווה בין הערכים באמצעות הפחתה של a מ-b.
  • במידה והתוצאה של תרגיל ההפחתה נמוכה מ-0 a יבוא לפני b, אם התוצאה גדולה מ-0 b בא לפני a, ואם התוצאה היא 0 הערכים שווים.
  • התוצאה היא שהערכים מסודרים בסדר עולה.

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

let myNumbers = [22,1,8,4,17];
myNumbers.sort((a, b) => a - b);
  • ונקבל את אותה התוצאה.
  • זו גם הדרך המקובלת ביותר להשתמש ב-sort, על ידי זה העברת פונקציה אנונימית.
  • כדי לסדר את המספרים בסדר יורד, צריך להפוך את האיברים בפעולת החשבון. במקום, a-b, להשתמש ב b-a:

    let myNumbers = [22,1,8,4,17];
    myNumbers.sort((a,b) => b-a);
    console.log(myNumbers); // [22, 17, 8, 4, 1]

     

    סידור מערך שכולל שדה מספרי לפי סדר

    ניתן לסדר פריטים של מערך לפי הערך של אחד השדות שלהם. לדוגמה, נסדר את המערך cars לפי מחירי המכוניות:

    let cars = [
      {name:'BMW', country:'Germany', price:50000},
      {name:'Audi', country:'Germany', price:45000},
      {name:'Forche', country:'Italy', price:250000},
      {name:'Tesla', country:'USA', price:500000},
      {name:'Range Rover', country:'GB', price:250000},
      {name:'Sussita', country:'Israel', price:2500}
    ];
    
    // sort by numeric value
    cars.sort( (a, b) => a.price - b.price);

     

    סידור מחרוזות לפי סדר

    כשרוצים להשוות מחרוזות, ה-compare function צריכה להחזיר את אחד הערכים 1, 1- או 0.

    משווים בין שני פרמטרים שנהוג לכנות a ו-b:

    function compareFunction(a, b) {
      if (a < b) {
        return -1; // a comes before b
      }else if (a > b) {
        return 1; // b comes before a
      } else { // a == b so don't change the order
        return 0;
      }
    }
    • הפונקציה מחזירה 1- אם a קטן מ-b,
    • מחזירה 1 אם b קטן מ-a,
    • בכל מקרה אחר (a ו-b שווים) הפונקציה מחזירה 0.

    נדגים בכך שנסדר את מערך המכוניות לפי שם:

    // sort by string
    cars.sort((a, b) => {
      let nameA = a.name.toLowerCase(); // ignore case
      let nameB = b.name.toLowerCase(); // ignore case
      
      if (nameA < nameB) {
        return -1;
      }
      if (nameA > nameB) {
        return 1;
      }
    
      // names must be equal
      return 0;
    });
    • הפכנו את השמות ל-lower case כדי להימנע מהשפעת האותיות הגדולות והקטנות.
    • ורק אח"כ ביצענו את ההשוואה.

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

    מדריכי JavaScript למתקדמים

     

    אהבתם? לא אהבתם? דרגו!

    0 הצבעות, ממוצע 0 מתוך 5 כוכבים

     

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך אומרים בעברית אינטרנט?

 

תמונת המגיב

עלה בתאריך: 28.11.2022

תודה מכולנו