现在我有一个带循环的函数:
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;
});
}
有很多重复。
答案 0 :(得分:1)
循环不会消失 - 对于C 1 的无关紧要的变化,O(n)仍然是O(n)。这里有没有问题*;使用最易维护/最好的代码。
我的偏好是不复制循环体,因为它代表重复 - 我更难以阅读并使代码的维护和修改更容易出错,因为任何更改也必须重复。
如果计算表达式是昂贵的,那么它应该在循环之外完成;但是,如果它取决于项目,则无法在循环内完成。
如果执行操作的代价很高(并且表达式在上面的逻辑中很便宜)那么条件中的操作在哪里完成并不重要。
1 JavaScript用于评估平凡条件/表达式(例如if (x)
)的“时间”量通常应被认为是无关紧要的。如果 出现问题,应首先使用性能基准进行识别。甚至分支预测(这对于应用于此级别的JavaScript而言非常愚蠢)也不适用,因为x
是执行代码的常量。