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