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";
}