簡體   English   中英

如何重構並使這些 if 語句更好?

[英]How to refactor and make these if statements better?

我有大量的if語句,我的任務是重構並提高可讀性。

if語句依賴於 2/3 JSON 鍵,我想不出更好的方法。

有人對我有什么建議嗎?

這些if語句嵌套在其他一些if語句中,但我使用了規則引擎來幫助分解它。 但我覺得規則引擎可能無法將其分解為更好的解決方案。

我在想像 map 或查找表之類的東西,但我無法處理如何執行此操作。

if (LM <= 15) {
  if (COMWT <= 25000) {
    COST = 225.0;
  }
  
  if (COMWT > 25000) {
    if (COMWT <= 30000) {
      COST = 275.0;
    }
  }
}

if (LM > 15) {
  if (LM <= 25) {
    if (COMWT <= 25000) {
      COST = 250;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 300.0;
      }
    }
  }
}

if (LM > 25) {
  if (LM <= 40) {
    if (COMWT <= 25000) {
      COST = 275;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 325.0;
      }
    }
  }
}

if (LM > 40) {
  if (LM <= 55) {
    if (COMWT <= 25000) {
      COST = 325;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 350.0;
      }
    }
  }
}

if (LM > 55) {
  if (LM <= 70) {
    if (COMWT <= 25000) {
      COST = 375;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 400.0;
      }
    }
  }
}

if (LM > 70) {
  if (LM <= 85) {
    if (COMWT <= 25000) {
      COST = 425;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 450.0;
      }
    }
  }
}

if (LM > 85) {
  if (LM <= 100) {
    if (COMWT <= 25000) {
      COST = 475;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 500.0;
      }
    }
  }
}

if (LM > 100) {
  if (LM <= 125) {
    if (COMWT <= 25000) {
      COST = 525;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 550.0;
      }
    }
  }
}

if (LM > 125) {
  if (LM <= 150) {
    if (COMWT <= 25000) {
      COST = 575;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = 600.0;
      }
    }
  }
}

if (LM > 150) {
  if (LM <= 300) {
    if (COMWT <= 25000) {
      COST = LM * 3;
    }
    
    if (COMWT > 25000) {
      if (COMWT <= 30000) {
        COST = LM * 3.5;
      }
    }
  }
}

if (LM > 300) {
  if (COMWT <= 25000) {
    COST = LM * 2.5;
  }
  
  if (COMWT > 25000) {
    if (COMWT <= 30000) {
      COST = LM * 3;
    }
  }
}

將檢查存儲在一個變量中,從最大的開始,一直到最低的

const comwtLow = COMWT <= 25000;
const comwtHigh = COMWT > 25000 && COMWT <= 30000

let COST;

if (LM > 300 && comwtLow) COST = LM * 2.5;
else if (LM > 300 && comwtHigh) COST = LM * 3;
else if (LM > 150 && comwtLow) COST = LM * 3;
else if (LM > 150 && comwtHigh) COST = LM * 3.5;
else if (LM > 125 && comwtLow) COST = 575;
else if (LM > 125 && comwtHigh) COST = 600;
....

如果沒有 if/else,您可以使用 object 進行數據結構並存儲費用的基本部分。 使用循環查找匹配的費用結構並生成成本。

 const fees = { 300: { low: { multi: 2.5 }, high: { multi: 3 }, }, 150: { low: { multi: 3 }, high: { multi: 3.5 }, }, 125: { low: { flat: 575 }, high: { flat: 600 }, }, 0: { low: { flat: 225 }, high: { flat: 275 }, }, } const feesValues = Object.keys(fees).map(Number).sort((a,b)=>ba); function getCost (lm, comwt) { const range = comwt <= 25000? "low": "high"; const feeData = fees[feesValues.find(value => value < lm)]; const { multi = 0, flat = 0 } = feeData[range]; return lm * multi + flat; } console.log(getCost(400, 10000)); console.log(getCost(130, 10000));

此代碼期望所有內容都匹配。 如果不是這種情況,您需要圍繞它添加更多邏輯和保護。

您可以通過將其存儲到對象數組中來實現。

Note: Please verify all conditions before using this code

 const conditionList = [ { high: 15, low: 0, comwt: [ { high: 25000, low: 0, cost: lm => 225 }, { high: 30000, low: 25000, cost: lm => 275 } ] }, { high: 25, low: 15, comwt: [ { high: 25000, low: 0, cost: lm => 250 }, { high: 30000, low: 25000, cost: lm => 300 } ] }, { high: 40, low: 25, comwt: [ { high: 25000, low: 0, cost: lm => 275 }, { high: 30000, low: 25000, cost: lm => 325 } ] }, { high: 55, low: 40, comwt: [ { high: 25000, low: 0, cost: lm => 325 }, { high: 30000, low: 25000, cost: lm => 350 } ] }, { high: 70, low: 55, comwt: [ { high: 25000, low: 0, cost: lm => 375 }, { high: 30000, low: 25000, cost: lm => 400 } ] }, { high: 85, low: 70, comwt: [ { high: 25000, low: 0, cost: lm => 425 }, { high: 30000, low: 25000, cost: lm => 450 } ] }, { high: 100, low: 85, comwt: [ { high: 25000, low: 0, cost: lm => 475 }, { high: 30000, low: 25000, cost: lm => 500 } ] }, { high: 125, low: 100, comwt: [ { high: 25000, low: 0, cost: lm => 525 }, { high: 30000, low: 25000, cost: lm => 550 } ] }, { high: 150, low: 125, comwt: [ { high: 25000, low: 0, cost: lm => 575 }, { high: 30000, low: 25000, cost: lm => 600 } ] }, { high: 300, low: 150, comwt: [ { high: 25000, low: 0, cost: lm => lm * 3 }, { high: 30000, low: 25000, cost: lm => lm * 3.5 } ] } ]; function cal(lm, cmwt) { let costd = 0; conditionList.forEach(item => { if (lm >= item.low && lm <= item.high) { item.comwt.forEach(c => { if (cmwt >= c.low && cmwt <= c.high) { costd = c.cost(lm); } }); } }); return costd; } console.log(cal(75, 24000));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM