制作一个计算总GPA的函数

时间:2014-09-29 02:23:26

标签: javascript

好吧所以我假设接受一系列成绩然后计算GPA。它不断出现“楠”,我忘了如何改变...我也不认为我的GPA变量是正确的。 “该函数必须包含一个包含字母等级数组的参数(例如,[”A +“,”A-“,”C“,”B-“,”A“]) 功能必须找到当前的GPA“

 var letter = "";
 var GPA;

 function calculateTotalGPA(letter) {
     var counter = 0;
     for (var i = 0; i < letter.length; i++) {
         if (letter == "A+") {
             GPA = 4;
             counter++;
         }
         if (letter == "A") {
             GPA = 4;
             counter++;

         }
         if (letter == "A-") {
             GPA = 3.67;
             counter++;
         }
         if (letter == "B+") {
             GPA = 3.33;
             counter++;
         }
         if (letter == "B") {
             GPA = 3;
             counter++;
         }
         if (letter == "B-") {
             GPA = 2.67;
             counter++;
         }
         if (letter == "C+") {
             GPA = 2.33;
             counter++;
         }
         if (letter == "C") {
             GPA = 2;
             counter++;
         }
         if (letter == "C-") {
             GPA = 1.67;
             counter++;
         }
         if (letter == "D") {
             GPA = 1;
             counter++;
         }
         if (letter == "F") {
             GPA = 0;
             counter++;
         }
     }
     return (GPA / counter);
 }

2 个答案:

答案 0 :(得分:0)

有更好的方法来编写这段代码,但我认为显示当前代码的错误更有用,而不是建议完全不同的东西。

在if语句中,您正在检查letter是否等于字符串,但letter是一个字符串数组,因此您要检查您的索引i处的元素循环。

即。变化

if (letter == "A+") {

if (letter[i] == "A+") {

您希望在除以counter之前计算总GPA点数,但目前您在每次迭代时重置GPA。

变化

 GPA = 4;

 GPA = GPA + 4;

或简写

 GPA += 4;

在进入for循环

之前也初始化变量
 var GPA = 0;

正如评论中所提到的,您可以采取其他措施来优化代码。

答案 1 :(得分:0)

请允许我提出一些建议,首先我在for声明中没有看到这一点,但它与计算无关。变量letterGPA的范围似乎很奇怪,这些2超出了计算函数的范围,可能最好在计算函数中移动至少GPA声明。< / p>

关于计算函数本身,我的建议是创建一个JSON对象,并像一个&#34; Dictionaries&#34;一样使用它,就像一个key value对象,例如:< / p>

var GPAs = {
   "A" : 4,"A-":3.67,"B+":3.33,"B":3,"B-":2.67,"C+":2.33,"C":2,"C-":1.67,"D":1,"F":0
};

然后您可以使用letter

访问它们,就像数组一样
var GPA =  GPAs[letter] ;

您的整个功能将如下所示:

function calculateGPA(letter) {
    var GPAs = {
       "A" : 4,"A-":3.67,"B+":3.33,"B":3,"B-":2.67,"C+":2.33,"C":2,"C-":1.67,"D":1,"F":0
    };
   return GPAs[letter];
}

要从数组中获取总数,有多种方法可以实现此目的,其中一种方法是使用Array.prototype.reduce,例如:

["A", "A"].reduce(function(a,letter){ 
         a=a+calculateGPA(letter); return a;
},0);

calculateGPATotal函数简化为:

function calculateGPATotal(arrayOfLetters){
     var GPAs = {
       "A" : 4,"A-":3.67,"B+":3.33,"B":3,"B-":2.67,"C+":2.33,"C":2,"C-":1.67,"D":1,"F":0
    };
     return arrayOfLetters.reduce(function(a,letter){  a=a+GPAs[letter]; return a;},0) / arrayOfLetters.length;
  } 

请注意,我使用的是arrayOfLetters.length而不是counter,这似乎是出于同样的目的。