常用的Underscore.js迭代模式

时间:2016-02-24 15:42:51

标签: javascript design-patterns callback underscore.js code-reuse

我正在使用Underscore.jsUnderscore-contrib处理财务分析工具。

我经常重复低级算术原语。例如,数组的简单求和:

码a.js:

arr_a = [20, 15, 7];
arr_b = [19, 19, 19];

_.reduce(arr_a, function(memo, x) { return memo + x; }, 0);
# => 42
_.reduce(arr_b, function(memo, x) { return memo + x; }, 0);
# => 57

我考虑过创建一个命名函数来消除迭代定义的重复:

码b.js:

function sum(memo, x) {
  return memo + x;
}

arr_a = [20, 15, 7];
arr_b = [19, 19, 19];

_.reduce(arr_a, sum, 0);
# => 42
_.reduce(arr_b, sum, 0);
# => 57

然后继续将reduce调用包裹起来进一步干掉这个:

码c.js:

function sum(memo, x) {
  return memo + x;
}
function accumulate(vector) {
  _.reduce(vector, sum, 0);
}

arr_a = [20, 15, 7];
arr_b = [19, 19, 19];

accumulate(arr_a);
# => 42
accumulate(arr_b);
# => 57

对我来说,这闻起来像是mixin

LIB-a.js:

_.mixin({
  accumulate: function (vector) {
    _.reduce(vector, function(memo, x) {
      return memo + x;
    }, 0);
  }
});

码d.js:

arr_a = [20, 15, 7];
arr_b = [19, 19, 19];

_.accumulate(arr_a);
# => 42
_.accumulate(arr_b);
# => 57

使用mixin可以很好地完成工作。我的问题是:是否有任何其他模式(特定于Underscore.js)在不使用mixins的情况下重复使用iterate?我不会在使用mixin时出现问题#39; s"""" [only]模式,我只是问是否有其他策略来解决回调重用问题。

例如, code-b.js 演示了一种可能的替代方法 - 只需将iteratee创建为命名函数(可能从模块中导出以避免需要匈牙利式的命名约定)。 / p>

1 个答案:

答案 0 :(得分:0)

经过大量的搜索,并阅读上述评论,缺乏回复,我很清楚答案是"没有。"