2016-10-11 24 views
0

所以我做了一個基本的GPA計算器,它工作得很好。我的問題是,是否有更容易/更清晰的方法來製作它,因此我不必在我的對象中列出大寫和小寫的等級值?因爲我想這樣做,不管用戶輸入的是小寫字母還是大寫字母,它仍然意味着相同。我試着做.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; 
     } 
    }; 

回答

1

你可以在你的對象

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

1

你沒有提到你是如何試圖使用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對象找他們之前,這樣的話你就可以擺脫所有的小寫鍵的存在。

+0

這個工作完美,現在我覺得很蠢。欣賞它。 – user6901580

0

只需將小寫值放入gradeValues即可。然後對輸入值使用.toLowerCase()如下:

input1 = document.form.input1.value.toLowerCase(); 
相關問題