Javascript 常用下划线.js迭代对象的模式

Javascript 常用下划线.js迭代对象的模式,javascript,design-patterns,callback,underscore.js,code-reuse,Javascript,Design Patterns,Callback,Underscore.js,Code Reuse,我正在使用和开发一个财务分析工具 我经常重复低级的算术原语。例如,数组的简单求和: code-a.js: 我考虑创建一个命名函数来消除迭代器定义的重复: 代码-b.js: 然后继续包装reduce调用以进一步干燥: 代码-c.js: 对我来说,这闻起来像是一个: lib-a.js: 代码-d.js: 使用mixin可以很好地完成工作。我的问题是:是否有其他模式(特定于下划线.js)可以在不使用mixin的情况下重用迭代对象?我使用mixin没有问题如果这是“唯一”模式,我只是问是否有其他策略可

我正在使用和开发一个财务分析工具

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

code-a.js:

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

代码-b.js:

然后继续包装
reduce
调用以进一步干燥:

代码-c.js:

对我来说,这闻起来像是一个:

lib-a.js:

代码-d.js:


使用mixin可以很好地完成工作。我的问题是:是否有其他模式(特定于下划线.js)可以在不使用mixin的情况下重用迭代对象?我使用mixin没有问题如果这是“唯一”模式,我只是问是否有其他策略可以解决回调重用问题


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

经过大量搜索,阅读了上面的注释,并且没有响应,我很清楚答案是“否”

你应该调用
sum
函数“
add
”,调用
accumulate
函数“
sum
”。我认为没有任何其他模式。你也可以探索Lodash(它有一个内置的)@sfletche这只是一个简单的例子(此外,在这个宏大的计划中,加法并不是一个很难重新发明的轮子;-)@Bergi也许不是,但除非你问,否则你永远不会知道
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
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
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({
  accumulate: function (vector) {
    _.reduce(vector, function(memo, x) {
      return memo + x;
    }, 0);
  }
});
arr_a = [20, 15, 7];
arr_b = [19, 19, 19];

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