我有以下部分代码,我不太喜欢:
if (a < 2){
b = 'somethingX';
} else if (a < 4){
b = 'somethingY';
} else if (a < 6){
....;
} else {
b = 'somethingZ';
}
我有大约 20 个这样的 if else 语句,它们全部由 (a < SomeNumber)
组成状况。我分配给 b
的结果can 不是 a
的函数和 a < someNumber
不是固定间隔。我想简化它们,但无法想出一个合适的解决方案。
如果我有 (a === SomeNumber)
我可以通过创建一个对象并从该对象访问值(similar to this)轻松地做到这一点,但这里我有 < 符号。有什么办法吗?
P.S. 请不要建议将此更改为 switch。我想让它更容易阅读,并根据我的主观意见阅读switch
与if else
处于同一级别.
P.S.2 人们问这个逻辑的原因。基本上我有一个瘦客户端,它返回错误消息的代码。他们以某种特定的方式分组。例如,从 1 到 8 的所有内容都是因为用户存在问题。从 9 到 21 因为 key 不正确。有时我不需要通知用户确切的消息,所以由于分组我可以只告诉一般消息。为什么我的服务器不发送消息?它尽可能细,所以发送 7 比大字符串更好。
最佳答案
处理它的最佳方法是使用包含步骤和关联值的数组。您还需要一个默认值:
var default = 'aValue';
var steps = [2, 'something', 6, 'anotherThing', 8, 'this', 10, 'that', ... ];
然后定义一个使用这个数组的函数
function findSmallestMatch(val, default, steps) {
for (var i=0; i<steps.length; i+=2) if (val<steps[i]) return steps[i+1];
return default;
}
使用它:
var res = findSmallestMatch ( 5, default, steps ); // returns 'anotherThing
编辑: 如果你知道你的输入是一个“合理”范围内的正整数,你可以预填 具有以下值的 map :
var default = 'aValue';
var steps = [2, 'something', 6, 'anotherThing', 8, 'this', 10, 'that', ... ];
var matchMap = [];
for (var i=0; i<maximumValue; i+=1)
matchMap[i] = findSmallestMatch(i, default, steps);
稍后您可以简单地使用 with :
var res = matchMap[value];
关于javascript - 有什么方法可以简化带有 < in 条件的长 if else 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401872/