js 使用 eval 函數優化條件查詢

我們在寫代碼的使用,經常會遇到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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章