Javascript 信到GPA的转换

Javascript 信到GPA的转换,javascript,jquery,Javascript,Jquery,当我将字母输入转换为数字,然后将其传递给另一个函数进行合计和平均时,我得到一个NaN返回值。我的转换函数或调用函数的方式有问题吗 function CalcGPA(a, b, c, d, e, f, g, h, i, j) { var initial = a + b + c + d + e + f + g + h + i + j; var total = initial / 10; return total; } function Convert(z) { va

当我将字母输入转换为数字,然后将其传递给另一个函数进行合计和平均时,我得到一个NaN返回值。我的转换函数或调用函数的方式有问题吗

function CalcGPA(a, b, c, d, e, f, g, h, i, j) {
    var initial = a + b + c + d + e + f + g + h + i + j;
    var total = initial / 10;
    return total;
}

function Convert(z) {
    var x = z.toString().toUpperCase();
    switch (x.value) {
        case "A":
            return 4.0;
        case "A-":
            return 3.67;
        case "B+":
            return 3.33;
        case "B":
            return 3.0;
        case "B-":
            return 2.67;
        case "C+":
            return 2.33;
        case "C":
            return 2.0;
        case "C-":
            return 1.7;
        case "D+":
            return 1.3;
        case "D":
            return 1.0;
        case "F":
            return 0;
    }
}

$(document).ready(function () {
    var input2 = $('[name="grade1"],[name="grade2"],[name="grade3"],[name="grade4"],[name="grade5"],[name="grade6"],[name="grade7"],[name="grade8"],[name="grade9"],[name="grade10"],[name="grade11"]');

    input2.keyup(function () {
        var total2;
        Convert((input2[0]));
        Convert((input2[1]));
        Convert((input2[2]));
        Convert((input2[3]));
        Convert((input2[4]));
        Convert((input2[5]));
        Convert((input2[6]));
        Convert((input2[7]));
        Convert((input2[8]));
        Convert((input2[9]));
        total2 = CalcGPA(input2[0], input2[1], input2[2], input2[3], input2[4], input2[5], input2[6], input2[7], input2[8], input2[9]);
        total2.toFixed(2);
        $(input2[10]).val(total2);
    });
});

回答您的问题:

您没有将
Convert()
调用的值存储在任何位置,因此当您调用
CalcGPA()
时,您只是将原始字母等级发送到函数中

要使您的代码更好:

我还强烈建议您重新考虑从各种输入字段收集值并在计算中使用它们的方式

例如,我将首先在输入中应用一个公共类。这样可以有1个或20个输入,您可以编写代码来处理任何事情

假设我给每个输入一个类名称
gradeLetterInput

然后您可以重写
$(document).ready()
CalcGPA()
函数,如下所示:

$(document).ready(function () {
    // get collection of inputs
    var $gradeLetterInputs = $('.gradeLetterInput');
    var gpaValues = $.map($gradeLetterInputs, function($item, idx) {
        return Convert($item.val());
    });
    var gpaAvg = CalcGPA(gpaValues);
    // not shown place avg GPA on DOM somwhere
}

function CalcGPA(arr) {
    var total = 0;
    var count = arr.length;
    for (i=0;i<count;i++) {
        total += arr[i];
    }
    return total/count;
}
$(文档).ready(函数(){
//获取输入的集合
变量$gradeLetterInputs=$('.gradeLetterInput');
var gpaValues=$.map($gradeLetterInputs,function($item,idx){
返回转换($item.val());
});
var gpaAvg=CalcGPA(gpaValues);
//未显示DOM somwhere上的平均GPA位置
}
函数CalcGPA(arr){
var合计=0;
变量计数=arr.length;

(i=0;i回答您的问题:

您没有将
Convert()
调用的值存储在任何位置,因此当您调用
CalcGPA()
时,您只是将原始字母等级发送到函数中

要使您的代码更好:

我还强烈建议您重新考虑从各种输入字段收集值并在计算中使用它们的方式

例如,我首先在输入中应用一个公共类,这样可以有1个输入或20个输入,您可以编写代码来处理任何内容

假设我给每个输入一个类名称
gradeLetterInput

然后您可以重写
$(document).ready()
CalcGPA()
函数,如下所示:

$(document).ready(function () {
    // get collection of inputs
    var $gradeLetterInputs = $('.gradeLetterInput');
    var gpaValues = $.map($gradeLetterInputs, function($item, idx) {
        return Convert($item.val());
    });
    var gpaAvg = CalcGPA(gpaValues);
    // not shown place avg GPA on DOM somwhere
}

function CalcGPA(arr) {
    var total = 0;
    var count = arr.length;
    for (i=0;i<count;i++) {
        total += arr[i];
    }
    return total/count;
}
$(文档).ready(函数(){
//获取输入的集合
变量$gradeLetterInputs=$('.gradeLetterInput');
var gpaValues=$.map($gradeLetterInputs,function($item,idx){
返回转换($item.val());
});
var gpaAvg=CalcGPA(gpaValues);
//未显示DOM somwhere上的平均GPA位置
}
函数CalcGPA(arr){
var合计=0;
变量计数=arr.length;

对于(i=0;i对数组元素运行Convert()获得的值调用CalcGPA。或者,将“转换”的值存储到临时变量,然后将其作为参数调用CalcGPA。类似于-

function CalcGPA(a, b, c, d, e, f, g, h, i, j) {
    var initial = a + b + c + d + e + f + g + h + i + j;
    var total = initial / 10;
    return total;
}

function Convert(z) {
    var x = z.toString().toUpperCase();
    switch (x.value) {
        case "A":
            return 4.0;
        case "A-":
            return 3.67;
        case "B+":
            return 3.33;
        case "B":
            return 3.0;
        case "B-":
            return 2.67;
        case "C+":
            return 2.33;
        case "C":
            return 2.0;
        case "C-":
            return 1.7;
        case "D+":
            return 1.3;
        case "D":
            return 1.0;
        case "F":
            return 0;
    }
}

$(document).ready(function () {
    var input2 = $('[name="grade1"],[name="grade2"],[name="grade3"],[name="grade4"],[name="grade5"],[name="grade6"],[name="grade7"],[name="grade8"],[name="grade9"],[name="grade10"],[name="grade11"]');

    input2.keyup(function () {
        var total2;
        total2 = CalcGPA(Convert(input2[0]), Convert(input2[1]), Convert(input2[2]), Convert(input2[3]), Convert(input2[4]), Convert(input2[5]), Convert(input2[6]), Convert(input2[7]), Convert(input2[8]), Convert(input2[9]));
        total2.toFixed(2);
        $(input2[10]).val(total2);
    });
});

对数组元素运行Convert()获得的值调用CalcGPA。或者,将“已转换”的值存储到临时变量中,然后将其作为参数调用CalcGPA。类似于-

function CalcGPA(a, b, c, d, e, f, g, h, i, j) {
    var initial = a + b + c + d + e + f + g + h + i + j;
    var total = initial / 10;
    return total;
}

function Convert(z) {
    var x = z.toString().toUpperCase();
    switch (x.value) {
        case "A":
            return 4.0;
        case "A-":
            return 3.67;
        case "B+":
            return 3.33;
        case "B":
            return 3.0;
        case "B-":
            return 2.67;
        case "C+":
            return 2.33;
        case "C":
            return 2.0;
        case "C-":
            return 1.7;
        case "D+":
            return 1.3;
        case "D":
            return 1.0;
        case "F":
            return 0;
    }
}

$(document).ready(function () {
    var input2 = $('[name="grade1"],[name="grade2"],[name="grade3"],[name="grade4"],[name="grade5"],[name="grade6"],[name="grade7"],[name="grade8"],[name="grade9"],[name="grade10"],[name="grade11"]');

    input2.keyup(function () {
        var total2;
        total2 = CalcGPA(Convert(input2[0]), Convert(input2[1]), Convert(input2[2]), Convert(input2[3]), Convert(input2[4]), Convert(input2[5]), Convert(input2[6]), Convert(input2[7]), Convert(input2[8]), Convert(input2[9]));
        total2.toFixed(2);
        $(input2[10]).val(total2);
    });
});