2016-10-11 3 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 
}; 

만 소문자 (또는 대문자하지만, 항상 같은 경우)를 사용하고 액세스를 소문자로 입력을 변환 할 수 있습니다. 이것은 어떤 장소에서 변환 및하지를 만들기 위해 한 곳에서만 변환하는 데 도움

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

처럼 내가 개체에 액세스 할 수있는 래퍼를 사용하는 것이 좋습니다이 경우

gradeValues[input1.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();