【发布时间】:2012-11-13 04:41:06
【问题描述】:
我正在构建一个使用两个滑块的计算器,如下所示:
我有一系列 CPU 和 RAM 数据存储在这样的对象中:
var CloudPlans = {
small: {
id: 'small',
from: {
cpu: 1,
ram: 1
},
to: {
cpu: 2,
ram: 2
},
price: {
linux: 3490,
windows: 4190
}
},
medium: {
id: 'medium',
from: {
cpu: 2,
ram: 2
},
to: {
cpu: 4,
ram: 4
},
price: {
linux: 5600,
windows: 6300
}
},
large: {
id: 'large',
from: {
cpu: 4,
ram: 4
},
to: {
cpu: 6,
ram: 8
},
price: {
linux: 9500,
windows: 10200
}
},
[...more configs here]
}
现在根据滑块的位置和值,我必须检查用户选择了哪个计划,然后计算组件的价格。这是检查价格范围的函数:
checkPlaninRange: function(cpuVal, ramVal) {
if(cpuVal >= CloudPlan.small.from.cpu && cpuVal <= CloudPlan.small.to.cpu ) {
return "small";
} else if (ramVal >= CloudPlan.small.from.cpu && ramVal <= CloudPlan.small.to.cpu) {
return "small";
}
}
如您所见,我将处理几乎无穷无尽的条件列表以返回所选计划。除了条件语句或案例语句之外,还有什么方法可以简化基于代码的这些计划配置的存储或选择?
【问题讨论】:
-
你有一个条件集合,都是一样的:迭代它们。到目前为止,“id”似乎是多余的。
-
你确定你的
checkPlaninRange真的做你想做的事吗?除了将ramVal与cpu属性进行比较之外,如果仅满足其中一个条件,它确实会返回“小”。 -
好吧..如果满足 RIGHT 条件,它会返回“大”和“超大”等中的任何一个。
-
范围是什么样的?它们是否都以一致的(或至少可预测的) 方式递增?如果是这样,那么只需简单的数学计算就可以确定它们在什么范围内。
-
它们不一致 - 由管理层根据其市场需求决定
标签: javascript refactoring conditional-statements