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

posted @ 2023-05-19 16:23  makalo  阅读(71)  评论(0编辑  收藏  举报