我們在寫代碼的使用,經常會遇到if else 很長很長的代碼,這種要怎麼優化,一直是仁者見仁智者見智的
我說下我的優化方案
原始代碼
例如:
if (income <= 10000) {
return income*0.365;
} else if (income <= 30000) {
return (income-10000)*0.2+35600;
} else if (income <= 60000) {
return (income-30000)*0.1+76500;
} else {
return (income-60000)*0.02+105600;
}
有這樣一段代碼,該怎麼優化?
優化
可以使用這種方式
const strategies = {
'>60000': (income) => (income - 60000) * 0.02 + 105600,
'>30000': (income) => (income - 30000) * 0.1 + 76500,
'>10000': (income) => (income - 10000) * 0.2 + 35600,
'<=10000': (income) => income * 0.365,
};
function calculateIncomeTax(income) {
for (let key in strategies) {
// 相當於執行 5000 > key
if (eval(`${income}${key}`)) {
return strategies[key](income);
}
}
}
console.log(calculateIncomeTax(5000)); // 1825
console.log(calculateIncomeTax(15000)); // 4220
console.log(calculateIncomeTax(35000)); // 9150
console.log(calculateIncomeTax(70000)); // 1260
上面這種方式與原始的,我說不出那個好那個壞,如果只有 一兩個條件無疑是原始的好,但是隨着條件過多,無疑是優化後的更佳,至於符合條件後調用的函數,可以自定義 ,這裏不做贅述,其實這也是策略模式的思想
關於eval函數
eval()
函數會將傳入的字符串當做 JavaScript 代碼進行執行。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval