常用 Underscore.js 迭代器的模式

Pattern for commonly used Underscore.js iteratees

我正在使用 Underscore.js and Underscore-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 调用进行进一步的 DRY:

代码-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 可以很好地完成工作。我的问题是:是否有任何 other 模式(特定于 Underscore.js)用于在不使用 mixin 的情况下重用迭代器? 我没有如果那是“唯一的”模式,那么使用 mixin 的问题,我只是想问一下是否有任何其他策略可以解决回调重用的问题。

例如,code-b.js 演示了一种可能的替代方案——简单地将迭代器创建为命名函数(可能从模块导出以避免需要匈牙利语-esque 命名约定)。

经过大量搜索并阅读以上评论后, 缺乏回复,我很清楚答案是 "no."