我有一个Json对象,我正在解析,然后与另一个数组进行比较,以找到它们匹配的位置。我有这个代码,
var gpaGrades = '{"A": 4, "A-": 3.67, "B+": 3.33, "B": 3, "B-": 2.67, "C+": 2.33, "C": 2, "C-": 1.67, "D+": 1.33, "D": 1, "D-": 0.67, "F":0}';
var letterGrades = ["A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "D-"]
var fallGrades = ["Fall 2015", "A-", "B+", "A", "B", "A"];
var springGrades = ["Spring 2016", "A+", "A+", "A-", "B+", "A"];
var gpa = JSON.parse(gpaGrades);
var sum = 0;
function getGrades(semester){
if(semester === "Fall 2015"){
for (var i = 1; i < fallGrades.length; i++) {
for(var x = 0; x < letterGrades.length; x++){
if (letterGrades[x].indexOf(fallGrades[i]) >= 0) {
var getGPA = fallGrades[i];
console.log(gpa[getGPA]);
}
}
}
}
}
这适用于我并提供与字母等级及其对应点值相匹配的所有值。问题是我需要获得gpa [getGPA]值的总和,然后计算该学期的GPA,然后我将除以长度。
我试过了
var sum += gpa[getGPA];
不知道为什么这不起作用,因为我看到一个类似的例子只有一组int正常工作。
感谢您的帮助。
答案 0 :(得分:1)
不要在循环中使用var,每次重新声明总和。在循环外使用var(仍应在函数内部工作)。然后在循环中使用sum += gpa[getGPA];
。
答案 1 :(得分:0)
var getGPA =0.0;
function getGrades(semester){
if(semester === "Fall 2015"){
for (var i = 1; i < fallGrades.length; i++) {
for(var x = 0; x < letterGrades.length; x++){
if (letterGrades[x].indexOf(fallGrades[i]) >= 0) {
getGPA += fallGrades[i];
}
}
}
}
}
console.log(gpa[getGPA]);
var sum += gpa[getGPA];
不起作用的原因是每次你的for循环迭代它都会初始化新变量。我已搬到外面,所以它会初始化一次,并保留以前的值。
注意:使用parseFloat
作为浮点值。