用javascript实现if-then-else-if-else堆栈的更简单方法是什么
What is simpler way to achieve an if then else if else stack in javascript
有没有一种方法可以简化它,或者我可以使用一种更简洁的形式?所包含的逻辑都是正确的。它看起来像是很多return
和else if
。
mode = (function(mode, current, proposed, origins, destinations) {
if (mode === 'none') {
return 'project';
} else if (proposed.count === 0) {
return 'unseated';
} else if (current.count > proposed.count && proposed.count > 0) {
return 'reducing';
} else if (proposed.count === destinations.count && destinations.count > 1 && current.count === 0) {
return 'newplus';
} else if (proposed.count === destinations.count && current.count === 0) {
return 'new';
} else if (proposed.count > destinations.count) {
return 'increasing';
} else if (proposed.count === destinations.count && destinations.count > origins.count) {
return 'moveplus';
} else {
return 'move';
}
}(moves.register[staff].move, {count: mode.currentDesks}, {count: mode.proposedDesks}, {count: mode.origins}, {count: mode.destinations})));
我之前使用了一个嵌套的三进制,它稍微短了一点,但我认为更容易出错,更难阅读(由于代码进化而不是复制错误,结果略有不同):
mode =
(moves.register[staff].move === 'none') ? 'project' :
(mode.proposedDesks === 0) ? 'unseated' :
(mode.currentDesks > mode.proposedDesks && mode.proposedDesks > 0) ? 'reducing' :
(mode.proposedDesks === mode.destinations && mode.destinations > 1 && mode.currentDesks === 0) ? 'newplus' :
(mode.proposedDesks === mode.destinations && mode.currentDesks === 0) ? 'new' :
(mode.proposedDesks > mode.destinations) ? 'additional' :
(mode.proposedDesks === mode.destinations && mode.destinations === mode.origins) ? 'move' :
(mode.proposedDesks === mode.destinations && mode.destinations > mode.origins) ? 'moveplus' :
'other';
因此,虽然我喜欢if…then…elseif
堆栈的易读性,但它感觉比它可能的更详细。我不认为我在寻找switch…case
版本。由于比较变量的数量,它没有完全削减它,并且在switch…case
中嵌套if
语句或在if…then…else
中嵌套三元运算符感觉是错误的。
我本能地认为我想要一种矩阵形式,其中返回值在网格中,并且不知何故,对各种逐位条件的矩阵计算返回了正确的结果。不过,我怀疑这将是紧凑代码胜过易读性的胜利。
有什么建议吗?
注意。选择变量名称(包括向每个变量添加count属性,而不是按原样命名变量或不指示变量为计数)是为了便于阅读
您可以使用var来存储您的选择,并在结束时返回
mode = (function(mode, current, proposed, origins, destinations) {
var varName='move';
if (mode === 'none') {
varName='project';
} else if (proposed.count === 0) {
varName='unseated';
} else if (current.count > proposed.count && proposed.count > 0) {
varName= 'reducing';
} else if (proposed.count === destinations.count && destinations.count > 1 && current.count === 0) {
varName= 'newplus';
} else if (proposed.count === destinations.count && current.count === 0) {
varName='new';
} else if (proposed.count > destinations.count) {
varName= 'increasing';
} else if (proposed.count === destinations.count && destinations.count > origins.count) {
varName= 'moveplus';
}
}(moves.register[staff].move, {count: mode.currentDesks}, {count: mode.proposedDesks}, {count: mode.origins}, {count: mode.destinations})));
相关文章:
- 在javascript regexp中捕获多个变量的一种更简单的方法
- 调用影子原型方法的更简单/更好的方法
- 有没有更简单的方法在 Wordpress 中为多个页面模板排队脚本
- 有没有更简单的方法在JavaScript中为Object.defineProperty编写
- 从所有单词中替换,即使用破折号分隔,第一个字符用大写[更简单的方法]
- 一种在指定时间后更改的背景图像之间添加更平滑过渡的简单方法
- 有没有更简单的方法来编写此代码
- 用于捕获滚动事件的跨浏览器方法(或暂时禁用滚动的更简单方法)
- 有没有更简单的方法来检查某个父元素的 N 个子元素是什么
- 查找嵌套 xml 节点的更简单方法
- free-jqgrid:保存、加载和应用过滤器数据的更简单方法,包括过滤器工具栏文本和页面设置
- 更改多个对象的类的更简单方法
- 用javascript实现if-then-else-if-else堆栈的更简单方法是什么
- 在Javascript中提取子字符串的更简单方法
- 使用JavaScript切换字段描述的更简单方法
- 使用PHP动态创建Javascript的更简单方法
- 使用JavaScript/Ajax切换单选按钮的更简单方法
- 从数组中获取值的更简单方法
- 在 React 中禁用链接的更简单方法
- 格式化if语句的更简单方法