在主体内放置一个if语句与复制循环体

时间:2014-09-04 20:48:25

标签: javascript

现在我有一个带循环的函数:

      var formatColumnNames = function (col) {
          return _.map(col, function (column) {
              column.name = column.Display;
              column.field = column.Display;
              return column;
          });
      };

我想添加另一个参数:sortable,它是一个布尔值。

如果sortable为true,则在循环内指定column.sortable = true。

对我来说这看起来很丑陋包含在循环中(循环O(n)次)。

我正在考虑在循环之前做一个if语句,但这可能意味着重复我在2个地方的循环,因为我有2种不同的方法。

最干净的方法是什么?

编辑:我觉得它很丑陋,因为像:

     var formatColumnNames = function (col, sortable) {
          if (sortable) {
          return _.map(col, function (column) {
              column.name = column.Display;
              column.field = column.Display;
              column.sortable = true;
              return column;
              });
          };
          else {
          return _.map(col, function (column) {
              column.name = column.Display;
              column.field = column.Display;
              return column;
              });
          }

有很多重复。

1 个答案:

答案 0 :(得分:1)

循环不会消失 - 对于C 1 的无关紧要的变化,O(n)仍然是O(n)。这里有没有问题*;使用最易维护/最好的代码。

我的偏好是复制循环体,因为它代表重复 - 我更难以阅读并使代码的维护和修改更容易出错,因为任何更改也必须重复。

如果计算表达式是昂贵的,那么它应该在循环之外完成;但是,如果它取决于项目,则无法在循环内完成。

如果执行操作的代价很高(并且表达式在上面的逻辑中很便宜)那么条件中的操作在哪里完成并不重要。


1 JavaScript用于评估平凡条件/表达式(例如if (x))的“时间”量通常应被认为是无关紧要的。如果 出现问题,应首先使用性能基准进行识别。甚至分支预测(这对于应用于此级别的JavaScript而言非常愚蠢)也不适用,因为x是执行代码的常量。