【问题标题】:What is simpler way to achieve an if then else if else stack in javascript在javascript中实现if then else if else stack的更简单方法是什么
【发布时间】:2013-06-26 01:46:55
【问题描述】:

有没有办法简化这个或更简洁的形式我可以使用?所包含的逻辑都是正确的。似乎有很多returns 和else ifs。

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})));

我之前使用过嵌套三元组,它略微缩短,但我认为更容易出错且难以阅读(由于代码演变而不是复制中的错误,结果略有不同): p>

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 语句或在 @ 中嵌套三元运算符感觉不对987654329@.

我本能地认为我想要一种矩阵形式,其中返回值在网格中,并且以某种方式对各种按位条件进行矩阵计算返回了正确的结果。我怀疑这将是紧凑代码胜过易读性的胜利。

有什么建议吗?

注意。选择变量名称,包括向每个变量添加计数属性,而不是这样命名变量或不指示它是计数,是为了便于阅读而选择的。

【问题讨论】:

    标签: javascript performance conditional-statements


    【解决方案1】:

    您可以使用 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})));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多