סידור מערכים של 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 למתקדמים

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

 

= 7 + 8