Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将if语句放在主体内,而不是复制循环主体_Javascript - Fatal编程技术网

Javascript 将if语句放在主体内,而不是复制循环主体

Javascript 将if语句放在主体内,而不是复制循环主体,javascript,Javascript,现在我有一个带循环的函数: var formatColumnNames = function (col) { return _.map(col, function (column) { column.name = column.Display; column.field = column.Display; return column; }); };

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

      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语句,但这可能意味着在两个地方重复我的循环,因为我有两个不同的方法

最干净的方法是什么

编辑:我觉得这很难看,因为:

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

有很多重复。

循环没有消失——对于C1中的一个无关紧要的变化,O(n)仍然是O(n)。这里没有问题;使用最易于维护/最好的代码

我的偏好是不复制循环体,因为它代表了复制-这对我来说更难阅读,并且使代码的维护和修改更容易出错,因为任何更改也必须复制

如果计算表达式的成本很高,那么应该在循环之外进行;但是,如果这取决于项目,则无法在循环内完成

如果执行操作的成本很高(根据上述逻辑,表达式很便宜),那么条件中的操作在哪里执行并不重要



1 JavaScript用于计算一个微不足道的条件/表达式(例如,
if(x)
)的“时间”通常被认为是无关紧要的。如果存在问题,应首先通过性能基准确定问题。甚至分支预测(应用于这种级别的JavaScript非常愚蠢)也不适用,因为
x
是代码执行的常量。

它有什么难看之处?@LucasRoss第二种形式难看(根据我的观点)因为它代表重复,而重复的一个坏处是,在更改过程中很容易引入错误,例如在上面的列表中添加一个新列。如果只对一个实体执行此操作会怎么样?[Re:your edit]映射的第二个参数是一个函数。它可以自己进行检查,不需要重复代码。示例:
if(sortable){column.sortable=sortable;}
就在返回列之前