Menu
Coddy logo textTech

שיטת Reduce

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-JavaScript של Coddy. שיעור 54 מתוך 65.

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

הנה התחביר של המצמצם:

array.reduce(function(accumulator, currentValue, currentIndex, array) {
    // החזר את הערך המעודכן של accumulator
}, initialValue);

רכיבים מרכזיים:

  1. צובר: צובר את ערכי ההחזרה של פונקציית ה-callback (חשבו עליו כסכום המצטבר)
  1. currentValue: האיבר הנוכחי שמטופל במערך
  1. currentIndex: (אופציונלי) האינדקס של האיבר הנוכחי
  1. מערך: (אופציונלי) המערך שעליו נקראה reduce()
  1. initialValue: (אופציונלי) ערך שישמש כארגומנט הראשון בקריאה הראשונה לפונקציית ה־callback

לדוגמה – סכום של מספרים:

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15

איך זה עובד שלב אחר שלב:

const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
    console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
    return acc + curr;
}, 0);

// פלט:
// מצטבר: 0, ערך נוכחי: 1
// מצטבר: 1, ערך נוכחי: 2
// מצטבר: 3, ערך נוכחי: 3
// מצטבר: 6, ערך נוכחי: 4
// תוצאה סופית: 10
challenge icon

אתגר

קל

יש ליצור פונקציה בשם calculateGroceryTotal שמקבלת מערך של אובייקטים המייצגים פריטי מכולת.

לכל אובייקט יש שתי תכונות:

  • name: מחרוזת (שם הפריט)
  • price: מספר (מחיר הפריט)

הפונקציה צריכה:

  1. לחשב את העלות הכוללת של כל הפריטים
  2. להחיל הנחה: - אם הסכום הכולל גדול מ-100, יש להחיל הנחה של 10%
  3. אם הסכום הכולל גדול מ-50 אך קטן מ-100 או שווה לו, יש להחיל הנחה של 5%
  4. אין הנחה על סכומים של 50 או פחות.

להחזיר אובייקט המכיל:

  • originalTotal: הסכום לפני ההנחה
  • discount: הסכום שנחסך
  • finalTotal: הסכום הסופי לאחר ההנחה

נסו בעצמכם

function calculateGroceryTotal(items) {
    // כתבו כאן את הקוד
    


    return {
        originalTotal: Math.round(originalTotal * 100) / 100,  // עגלו ל-2 ספרות אחרי הנקודה העשרונית
        discount: Math.round(discount * 100) / 100,
        finalTotal: Math.round(finalTotal * 100) / 100
    };
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר JavaScript אונליין