2013-02-27 5 views
0

가격표를 만들기 위해 노력 중이며 파싱 할 데이터가 많습니다. 모든 데이터가 다르고 공식이 없습니다. 아래는 내가 작업하고있는 스 니펫입니다. 이 모든 데이터를 저장하고 액세스하는 더 좋은 방법이 있는지 궁금합니다.많은 데이터를 저장하는 더 나은 방법

function getPrice(number) { 
    totalPrice = 0; 
    for (var t = 2; t <= number; t++) { 
     var ipp = 'cab' + (t - 1) + 'Size'; 
     var cabP = 'p' + (t - 1); 
     var cabStyle = document.getElementById('cab' + (t - 1)).value; 
     var cabs = document.getElementById(ipp); 
     switch (cabStyle) { 
      case 'b1': 
       if (cabs.value === "") { 
        totalPrice = totalPrice + 0; 
        document.getElementById(ipp).style.border = "1px solid red"; 
       } else if (cabs.value <= 12) { 
        totalPrice = totalPrice + 111; 
        document.getElementById(cabP).innerHTML = " $111"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 12 && cabs.value <= 13.5) { 
        totalPrice = totalPrice + 113; 
        document.getElementById(cabP).innerHTML = " $113"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 13.5 && cabs.value <= 15) { 
        totalPrice = totalPrice + 116; 
        document.getElementById(cabP).innerHTML = " $116"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 15 && cabs.value <= 16.5) { 
        totalPrice = totalPrice + 118; 
        document.getElementById(cabP).innerHTML = " $118"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 16.5 && cabs.value <= 18) { 
        totalPrice = totalPrice + 120; 
        document.getElementById(cabP).innerHTML = " $120"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 18 && cabs.value <= 19.5) { 
        totalPrice = totalPrice + 122; 
        document.getElementById(cabP).innerHTML = " $122"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 19.5 && cabs.value <= 21) { 
        totalPrice = totalPrice + 124; 
        document.getElementById(cabP).innerHTML = " $124"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 21 && cabs.value <= 22.5) { 
        totalPrice = totalPrice + 126; 
        document.getElementById(cabP).innerHTML = " $126"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 22.5 && cabs.value <= 24) { 
        totalPrice = totalPrice + 141; 
        document.getElementById(cabP).innerHTML = " $141"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 24 && cabs.value <= 27) { 
        totalPrice = totalPrice + 146; 
        document.getElementById(cabP).innerHTML = " $146"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 27 && cabs.value <= 30) { 
        totalPrice = totalPrice + 152; 
        document.getElementById(cabP).innerHTML = " $152"; 
        document.getElementById(ipp).style.border = ""; 
       } 
       break; 
      case 'b2': 
       if (cabs.value === "") { 
        totalPrice = totalPrice + 0; 
        document.getElementById(ipp).style.border = "1px solid red"; 
       } else if (cabs.value <= 27) { 
        totalPrice = totalPrice + 167; 
        document.getElementById(cabP).innerHTML = " $167"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 27 && cabs.value <= 30) { 
        totalPrice = totalPrice + 173; 
        document.getElementById(cabP).innerHTML = " $173"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 30 && cabs.value <= 33) { 
        totalPrice = totalPrice + 178; 
        document.getElementById(cabP).innerHTML = " $178"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 33 && cabs.value <= 36) { 
        totalPrice = totalPrice + 183; 
        document.getElementById(cabP).innerHTML = " $183"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 36 && cabs.value <= 39) { 
        totalPrice = totalPrice + 194; 
        document.getElementById(cabP).innerHTML = " $194"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 39 && cabs.value <= 42) { 
        totalPrice = totalPrice + 199; 
        document.getElementById(cabP).innerHTML = " $199"; 
        document.getElementById(ipp).style.border = ""; 
       } else if (cabs.value > 42 && cabs.value <= 45) { 
        totalPrice = totalPrice + 205; 
        document.getElementById(cabP).innerHTML = " $205"; 
        document.getElementById(ipp).style.border = ""; 
       } 
       break; 
+0

여기서 컨텍스트 란 무엇입니까? 당신은 HTML에서 가격을 어떻게 든 추출하고 있습니까? 'number'와'cabStyle'은 무엇입니까? –

+0

'number'는 버튼 기능의 카운터 일 뿐이며'cabStyle'은 옵션 목록의 스타일 일뿐입니다. – punksux

답변

1

일부 코드를 재정렬하면 도움이 될 수 있습니다. 예를 들어, document.getElementById(ipp).style.border 행은 첫 번째 블록을 제외한 모든 블록에서 동일합니다. 당신은 그것을 꺼내 그것의 별도의 블록 할 수 있도록 : b2에 대한

cabdata = [111,113,116,118,120,122,124,126,141,146,146,152,152]; 
// note duplicate values at end due to bigger interval 
cabindex = Math.max(0,Math.ceil((cabs.value-12)/1.5)); 
totalPrice += cabdata[cabindex]; 
document.getElementById(cabP).innerHTML = " $"+cabdata[cabindex]; 

마찬가지로 : 당신의 b1 택시는 다음과 같이 배열 될 수있다처럼 그런 보이는

document.getElementById(ipp).style.border = cabs.value ? "" : "1px solid red"; 

cabdata = [167,173,178,183,194,199,205]; 
cabindex = Math.max(0,Math.ceil((cabs.value-27)/3)); 
totalPrice += cabdata[cabindex]; 
document.getElementById(cabP).innerHTML = " $"+cabdata[cabindex]; 

마지막 두 줄은 위의 두 블록에서 동일하므로 switch 이후로 이동할 수 있습니다.

항상 간단한 수식은 아니지만 항상 수식이 있습니다. 예 : Batman formula

+0

완벽하게 작동합니다. 감사. 내가 그것을 얻었는지 확인하기 위해 : 나는 cab.size에서 첫 번째 크기를 뺀 다음 그 차이만큼 다음 크기로 나눕니다. – punksux

+0

맞습니다. –

관련 문제