首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缩短Javascript if-else结构

缩短Javascript if-else结构
EN

Stack Overflow用户
提问于 2013-07-16 22:28:08
回答 11查看 739关注 0票数 17

我的代码是:

代码语言:javascript
运行
复制
 var level = function (d) {
    if (value(d) > median + stdev) {
        return 1;
    } else if (value(d) > median) {
        return 2;
    } else if (value(d) > median - stdev) {
        return 3;
    } else {
        return 4;
    }
 };

有没有更好的方法呢?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-07-16 22:43:36

当然,多次调用value(d)是可以避免的。

您还可以使用symmetry将其缩短一点

代码语言:javascript
运行
复制
  var level = function (d) {
    //
    //               -std    median  +std
    // ----------------|-------|-------|------------------
    // 4444444444444444 3333333 2222222 111111111111111111
    //
    var i = Math.floor((median - value(d)) / stddev) + 3;
    return Math.max(1, Math.min(4, i));
  };

然而,对于一个真正的项目来说可能不是一个好主意。我没有测试,但如果我发现这个代码比你问题中的原始代码慢,我也不会感到惊讶,而且我肯定会发现它更难维护。

请注意,排除一次性一次性脚本通常代码是一次编写和多次读取(为了维护,如改进或调试),因此“更容易阅读”通常比“更容易编写”更重要。

当shorter意味着“更容易阅读”是一件好事,当它开始意味着“更难阅读”时就不是了。

票数 15
EN

Stack Overflow用户

发布于 2013-07-16 22:53:14

为了完成这个集合,这里是@austin引用的switch方法:

代码语言:javascript
运行
复制
var level = function (d) {
  var d = value(d) - median;
  switch (true) {
  case d > stdev : return 1;
  case d > 0:      return 2;
  case d > -stdev: return 3;
  default:         return 4;
  }
};
票数 7
EN

Stack Overflow用户

发布于 2013-07-16 22:38:19

这个解决方案更好,但我不建议在生产中使用它,因为它有点令人困惑:

代码语言:javascript
运行
复制
4 - [median + stdev, median, median - stdev].filter(function(e, i, a) {
    return value(d) > e;
}).length 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17679292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档