Javascript 常用下划线.js迭代对象的模式
我正在使用和开发一个财务分析工具 我经常重复低级的算术原语。例如,数组的简单求和: code-a.js: 我考虑创建一个命名函数来消除迭代器定义的重复: 代码-b.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没有问题如果这是“唯一”模式,我只是问是否有其他策略可
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