סידור מערכים של JavaScript באמצעות הפונקציה sort
זה המדריך הרביעי בסדרה שמוקדשת ללימוד פונקציות של JavaScript שפועלות על מערכים. המדריכים הקודמים טיפלו בפונקציות:
- foreach שהיא דרך אלגנטית לכתוב לולאה של JavaScript.
- סינון מערכים ב JavaScript-באמצעות הפונקציה filter
- טרנספורמציה של מערכים ב-JavaScript באמצעות הפונקציה map
sort מאפשר לנו לסדר מערך לפי סדר. לדוגמה, לסדר פריטים של מערך מספרים מערך גבוה לנמוך. או הפוך.
התחביר של sort כולל את המערך שרוצים למיין ואת הפונקציה הממיינת:
myArray.sort(compareFunction)
- myArray - המערך שאנחנו רוצים למיין אותו
- compareFunction - הפונקציה שמשווה בין הערכים ומחזירה איזה ערך גדול יותר.
הפונקציה המשווה
הפונקציה המשווה, 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.
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.