patternjavascriptMinor
My grade calculator with special weighting
Viewed 0 times
weightingwithgradespecialcalculator
Problem
My school has a special
HTML:
CSS:
JS:
```
function changeoldgradedisplay() {
if (document.getElementById('radio_old_grade').checked) {
document.getElementById('old_grade_input').style.display = 'block';
} else {
document.getElementById('old_grade_input').style.display = 'none';
}
}
function get_average(items) {
var sum = 0;
var len = items.length;
for (var i = 0; i < len; i++) {
sum += parseFloat(items[i]);
}
return sum/len;
}
function add_grades() {
var formal_grades = document.getElementById('fog').value.split(',');
var informal_grades = document.getElementById('ing').value.split(',');
var previous_grade = (get_average(formal_grades) .65) + (get_average(informal_grades) .35);
document.getElementById('previous_grade').innerHTML = 'Estimate of previous grade - ' + previous_grade.toFixed(2);
var is_formal = document.getElementById('formal_radio').checked;
var gradelist = null;
if (is_formal) {
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
formal_grades[formal_grades.indexOf(old_grade)] = new_grade
} else {
formal_grades.push(new_grade);
}
} else {
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
informal_grades[info
65% formal 35% informal weighting, so I made something to find what your grade would be if you added or changed a grade.http://retep-mathwizard.github.io/gradecalc/gradecalc.htmlHTML:
Grade Calculator
Grade Calculator
New
Change
Informal
Formal
Go
CSS:
#fog, #ing {
width: 300px;
}JS:
```
function changeoldgradedisplay() {
if (document.getElementById('radio_old_grade').checked) {
document.getElementById('old_grade_input').style.display = 'block';
} else {
document.getElementById('old_grade_input').style.display = 'none';
}
}
function get_average(items) {
var sum = 0;
var len = items.length;
for (var i = 0; i < len; i++) {
sum += parseFloat(items[i]);
}
return sum/len;
}
function add_grades() {
var formal_grades = document.getElementById('fog').value.split(',');
var informal_grades = document.getElementById('ing').value.split(',');
var previous_grade = (get_average(formal_grades) .65) + (get_average(informal_grades) .35);
document.getElementById('previous_grade').innerHTML = 'Estimate of previous grade - ' + previous_grade.toFixed(2);
var is_formal = document.getElementById('formal_radio').checked;
var gradelist = null;
if (is_formal) {
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
formal_grades[formal_grades.indexOf(old_grade)] = new_grade
} else {
formal_grades.push(new_grade);
}
} else {
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
informal_grades[info
Solution
A couple of minor things:
-
-
This part of the code:
repeats very similar code where the only difference is which array is used. Also,
by assigning the array that needs to be used to
This works because when you assign an array (or any object) to a variable in javascript, it assigns the reference to the array instead of copying the value. For example, if
-
fog and ing aren't very meaningful id names, they would be better as something like formal_grades and informal_grades instead.-
This part of the code:
var is_formal = document.getElementById('formal_radio').checked;
var gradelist = null;
if (is_formal) {
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
formal_grades[formal_grades.indexOf(old_grade)] = new_grade
} else {
formal_grades.push(new_grade);
}
} else {
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
informal_grades[informal_grades.indexOf(old_grade)] = new_grade
} else {
informal_grades.push(new_grade);
}
}
repeats very similar code where the only difference is which array is used. Also,
gradelist isn't used anywhere. You can avoid the repetition like this:var is_formal = document.getElementById('formal_radio').checked;
var gradelist = is_formal ? formal_grades : informal_grades;
new_grade = document.getElementById("new_grade_input").value;
if (document.getElementById('radio_old_grade').checked) {
old_grade = document.getElementById("old_grade_input").value;
gradelist[gradelist.indexOf(old_grade)] = new_grade
} else {
gradelist.push(new_grade);
}
by assigning the array that needs to be used to
gradelist. This works because when you assign an array (or any object) to a variable in javascript, it assigns the reference to the array instead of copying the value. For example, if
formal_grades is assigned to gradelist they will both refer to the same array.Context
StackExchange Code Review Q#153041, answer score: 4
Revisions (0)
No revisions yet.