Javascript - 在所有函数的输入上以编程方式执行方法
Javascript - Programmatically execute method on input of all functions
我想将解析器添加到函数列表中,例如:
var list = {
function1: function(input){},
function2: function(input){}
}
我希望所有 input
参数都预先处理了另一个函数。这可能吗?
有什么建议吗?
提前致谢
你的意思是这样的吗?它使用将 f
预应用到其输入的方法创建 funcs
的新副本。:
function addPreProcessing(funcs, f) {
return Object.keys(funcs).reduce(function (o, key) {
o[key] = function (input) {
return funcs[key](f(input));
};
return o;
}, {});
}
var list = {
log: function (input) { snippet.log(input); },
quadruple: function (input) { return input * 4; }
};
// preprocess all inputs by doubling them
var list2 = addPreProcessing(list, function (input) {
return input * 2;
});
list2.log(5); // logs 10 ( 5 * 2 )
snippet.log(list2.quadruple(1)); // logs 8 ( 1 * 2 * 4)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
这里是上面 addPreProcessing
函数的 lodash 版本:
function addPreProcessing(funcs, f) {
return _.mapValues(funcs, _.flowRight(_.partial(_.flow, f), _.identity));
}
我想将解析器添加到函数列表中,例如:
var list = {
function1: function(input){},
function2: function(input){}
}
我希望所有 input
参数都预先处理了另一个函数。这可能吗?
有什么建议吗?
提前致谢
你的意思是这样的吗?它使用将 f
预应用到其输入的方法创建 funcs
的新副本。:
function addPreProcessing(funcs, f) {
return Object.keys(funcs).reduce(function (o, key) {
o[key] = function (input) {
return funcs[key](f(input));
};
return o;
}, {});
}
var list = {
log: function (input) { snippet.log(input); },
quadruple: function (input) { return input * 4; }
};
// preprocess all inputs by doubling them
var list2 = addPreProcessing(list, function (input) {
return input * 2;
});
list2.log(5); // logs 10 ( 5 * 2 )
snippet.log(list2.quadruple(1)); // logs 8 ( 1 * 2 * 4)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
这里是上面 addPreProcessing
函数的 lodash 版本:
function addPreProcessing(funcs, f) {
return _.mapValues(funcs, _.flowRight(_.partial(_.flow, f), _.identity));
}