DRY: More elegant nested "if" statements

When you use early returns, you can omit the else/else if statements. I prefer this style. It helps avoid arrow code.

Rather than using global variables, consider passing them as function parameters instead.

function numberSections() {
    var courseArray = ["ED-110", "ED-115", "ED-115", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-240", "ED-240", "ED-330", "ED-420"];
    var last = "";
    var sn = 1;

    for (var i = 0; i < courseArray.length; i++) {
        if (courseArray[i] === last) {
            sn++;
        } else {
            sn = 1;
        }

        console.log(makeSectionNumber(courseArray[i], last, sn));

        last = courseArray[i];
    }
}

function makeSectionNumber(course, lastCourse, sectionNumber) {
    if (course === "ED-110" || course === "ED-115" || course === "ED-120" || course === "ED-125") {
        return course + "-CO";
    }

    // Do not need "else if", because we won't reach here if the above "if" was true.
    if (course === lastCourse && sectionNumber < 10) {
        return course + "-0" + sectionNumber;
    }

    // Do not need "else if", because we won't reach here if one of the above two "if's" were true.
    if (course === lastCourse && sectionNumber >= 10) {
        return course + "-" + sectionNumber;
    }

    // Don't need "else" here because we won't reach here if one of the above three "if's" were true.
    return course + "-01";
}

If we want to further reduce else/else if statements in favour of early returns, we could extract the if statement that increments or resets the section number based on the last course, so the final re-arranged code might be:

function numberSections() {
    var courseArray = ["ED-110", "ED-115", "ED-115", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-130", "ED-240", "ED-240", "ED-330", "ED-420"];
    var last = "";
    var sn = 1;

    for (var i = 0; i < courseArray.length; i++) {
        sn = updateSectionNumber(courseArray[i], last, sn);
        console.log(makeCourseString(courseArray[i], last, sn));
        last = courseArray[i];
    }
}

function updateSectionNumber(course, lastCourse, sectionNumber) {
    if (course === lastCourse) {
        return sectionNumber + 1;
    }

    return 1;
}

function makeCourseString(course, lastCourse, sectionNumber) {
    if (course === "ED-110" || course === "ED-115" || course === "ED-120" || course === "ED-125") {
        return course + "-CO";
    }

    if (course === lastCourse && sectionNumber < 10) {
        return course + "-0" + sectionNumber;
    }

    if (course === lastCourse && sectionNumber >= 10) {
        return course + "-" + sectionNumber;
    }

    return course + "-01";
}
/r/learnjavascript Thread