2011-09-14 5 views
1

가격 매트릭스에서 폭과 높이에 따라 커튼 가격을 계산해야합니다. if 문 대신 배열에서 어떻게 계산할 수 있습니까?자바 스크립트 가격 매트릭스 배열

function checkPrice() { 

     var price = calculatePrice();  

     function calculatePrice(price) { 

    var width = parseInt(document.getElementById('customid0').value); 
    var height = parseInt(document.getElementById('customid1').value); 

      // width up to 100 
      if (width <= 100){ 

      if (height <=50){       
      price = 67.22;       
      } 

      if (height >50 && height <=100){        
      price = 103.34;        
      } 

      if (height >100 && height <=130){       
      price = 133.11;        
      } 
      } 

      // width between 101 and 125 
      if (width > 100 && width <= 125){ 

      if (height <=50){       
      price = 76.69;       
      } 

      if (height >50 && height <=100){        
      price = 113.01;        
      } 

      if (height >100 && height <=130){       
      price = 146.05;      
      } 
      } 

      // width between 126 and 150 
      if (width > 125 && width <= 150){ 

      if (height <=50){       
      price = 83.69;       
      } 

      if (height >50 && height <=100){        
      price = 124.74;        
      } 

      if (height >100 && height <=130){       
      price = 161.28;      
      } 
      } 

       return price; 
      } 

document.getElementById('product_addtocart_form').action = '<?php echo $this->getAddToCartUrl($_product) ?>&price='+price; 
    optionsPrice.changePrice('options', price); 
    optionsPrice.reload(); 
    Price.changePrice(price); 
} 
+0

돈을 위해 십진법을 사용하지 마십시오. 수학에 100을 곱하고 수학이 끝나면 100으로 나눕니다. 이유를 보려면 0.02와 0.01을 함께 사용해보십시오. – Incognito

+0

감사합니다. – Gumtee

+0

이 숙제가 있습니까? – Incognito

답변

1
var width = parseInt(document.getElementById('customid0').value, 10); 
var height = parseInt(document.getElementById('customid1').value, 10); 

var conditions = [ 
     [0, 100, [  // width = 0..100 
      [0, 50, [  //  height = 0..50 
       67.22  //   price = 67.02 
      ]], 
      [50, 100, [ //  height = 50..100 
       103.34 //   price = 103.34 
      ]], 
      [100, 130, [ //  height = 100..130 
       133.11 //   price = 133.11 
      ]] 
     ]], 
     [101, 125, [  // width = 101..125 
      [0, 50, [  //  height = 0..50 
       76.69  //   ... 
      ]], 
      [51, 100, [ 
       113.01 
      ]], 
      [101, 130, [ 
       146.05 
      ]] 
     ]], 
     [126, 150, [ 
      [0, 50, [ 
       83.69 
      ]], 
      [51, 100, [ 
       124.74 
      ]], 
      [101, 130, [ 
       161.28 
      ]] 
     ]] 
    ]; 

for (var w = 0, w_len = conditions.length; w < w_len; w += 1) 
{ 
    if (width >= conditions[w][0] && width <= conditions[w][1]) 
    { 
     for (var h = 0, h_len = conditions[w][2].length; h < h_len; h += 1) 
     { 
      if (height >= conditions[w][2][h][0] && height <= conditions[w][2][h][1]) 
      { 
       price = conditions[w][2][h][2]; 
       break; 
      } 
     } 
    } 
} 

Fiddle here을 확인합니다.

+0

'min','max' 및'data'가있는 곳에서 각 그룹을 쉽게 만들 수 있습니다. – Incognito

+0

@Incognito : 사실, 다차원 배열을 사용하는 것보다 데이터를 저장하고 읽는 더 좋은 방법이 많이 있다고 생각합니다. 그러나 이것은 질문에 대한 대답입니다. 내 접근 방식을 최적화 할 수 있다고 생각하십니까? (배열에 대해 항상 이야기하고있다.) –

+0

네,'parseInt'가 십진수로 기수를 설정하지 않으면, 8 진수로 해석되는 경향이있다. 루프의 최적화를 실제로 보지 못했습니다. 루프를 만들 수있는 방법이 있습니다. – Incognito