除了将它们全部列出之外,使大小写字母在对象中具有相同值的更好方法?

Better way to make lower and upper case letters have the same value in object other than listing them all out?

所以我做了一个基本的 GPA 计算器,效果很好。不过,我的问题是,是否有一种 easier/cleaner 方法可以做到这一点,这样我就不必在我的对象中列出小写和大写的等级值?因为我想做到无论用户输入的是小写字母还是大写字母,它的意思都是一样的。我尝试执行 .toUpperCase() 函数,但它没有用,或者我只是做错了,而且我对如何执行此操作感到困惑,或者如果可能的话,就这样离开就好了。谢谢。这是我的对象。

var gradeValues = {
    "A+": 4.33,
    "a+": 4.33,
    "A": 4.0,
    "a": 4.0,
    "A-": 3.67,
    "a-": 3.67,
    "B+": 3.33,
    "b+": 3.33,
    "B": 3.0,
    "b": 3.0,
    "B-": 2.67,
    "b-": 2.67,
    "C+": 2.33,
    "c+": 2.33,
    "C": 2.0,
    "c": 2.0,
    "C-": 1.67,
    "c-": 1.67,
    "D+": 1.33,
    "d+": 1.33,
    "D": 1.0,
    "d": 1.0,
    "D-": 0.67,
    "d-": 0.67,
    "F": 0,
    "f": 0
};

如果您想知道,这里是其余代码。

var getGrade = function() {
    input1 = document.form.input1.value;
    input2 = document.form.input2.value;
    input3 = document.form.input3.value;
    input4 = document.form.input4.value;

    var inputArray = [input1, input2, input3, input4];

    document.getElementById("result").innerHTML = ((gradeValues[input1] + gradeValues[input2] + gradeValues[input3] + gradeValues[input4]) / 4) + " is your GPA";

    for(var i = 0; i < inputArray.length; i++) {
        if(inputArray[i] === "") {
            alert("You didn't enter a letter into all of the boxes.");
            document.getElementById("result").innerHTML = "";
            return false;
        }
        else if(isNaN(inputArray[i]) === false) {
            alert("You have to enter a letter, not a number!");
            document.getElementById("result").innerHTML = "";
            return false;
        }
    };

您只能在对象中使用小写字母(或大写字母,但大小写始终相同)

var gradeValues = {
    "a+": 4.33,
    "a": 4.0,
    "a-": 3.67,
    "b+": 3.33,
    "b": 3.0,
    "b-": 2.67,
    "c+": 2.33,
    "c": 2.0,
    "c-": 1.67,
    "d+": 1.33,
    "d": 1.0,
    "d-": 0.67,
    "f": 0
};

并将输入转换为小写以供访问。

gradeValues[input1.toLowerCase()]

在这种情况下,我建议使用包装器来访问对象,例如

function getValue(grade) {
    return gradeValues(grade.toLowerCase()];
}

这有助于仅在一个地方进行转换,而不是在您访问 gradeValues 的任何地方进行转换。

您没有提到您是如何尝试使用 toUpperCase() 的,以及为什么它不起作用,但这是正确的想法。这样的事情应该有效:

input1 = document.form.input1.value.toUpperCase();
input2 = document.form.input2.value.toUpperCase();
input3 = document.form.input3.value.toUpperCase();
input4 = document.form.input4.value.toUpperCase();

gradeValues 对象中查找它们之前,它会将您的输入转换为大写,这样您就可以去掉那里的所有小写键。

只需将小写值放在 gradeValues 中。然后在输入值上使用 .toLowerCase() ,例如:

input1 = document.form.input1.value.toLowerCase();