除了将它们全部列出之外,使大小写字母在对象中具有相同值的更好方法?
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();
所以我做了一个基本的 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();