javascript - 有什么方法可以简化带有 < in 条件的长 if else 语句?

标签 javascript

我有以下部分代码,我不太喜欢:

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。我想让它更容易阅读,并根据我的主观意见阅读switchif 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/

相关文章:

javascript - 将html转换为JS文件中的html字符串

javascript - Firebase 仅发送已过期的电子邮件验证链接

javascript - HTML 渲染后初始化时,iFrame 不加载 src

javascript - append 和 addClass 动画失败

javascript - 如何在ajax请求中将数组js数组发送到php页面

javascript - 无法使用 Passport 登录 - Nodejs

javascript - 在 Meteor 中执行大型操作

javascript - Google Transliterate 结果未在 Angular Controller 中使用的范围内更新

javascript - 无法清除模态窗口关闭操作上的间隔

javascript - node.js 事件循环是否像 ajax 调用?