我有大量if陳述句需要重構并使其更具可讀性。
這些if陳述句依賴于 2/3 JSON 鍵,我想不出一個讓它變得更好的好方法。
有人對我有什么建議嗎?
這些if陳述句嵌套在其他一些if陳述句中,但我使用了規則引擎來幫助分解它。但我覺得規則引擎可能無法將其分解為更好的解決方案。
我在想像地圖或查找表這樣的東西,但我無法處理如何做到這一點。
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;
}
}
}
uj5u.com熱心網友回復:
將支票存盤在一個變數中,從最大的開始,一直到最低的
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,您可以使用物件創建資料結構并存盤費用的基本部分。使用回圈查找匹配的費用結構并生成成本。
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)=>b-a);
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));
此代碼期望所有內容都匹配。如果不是這種情況,您需要圍繞它添加更多邏輯和保護。
uj5u.com熱心網友回復:
您可以通過將其存盤到物件陣列中來實作。
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));
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/392350.html
標籤:javascript 节点.js if 语句 重构
上一篇:如何在C中有條件地分支到由算術運算或查找表給出的標簽
下一篇:檢測檔案是在本地打開還是通過共享
