可以说我有一个如下的函数数组
var updateCountryToCanada = function (items) {
return items.map(i => {i['country'] = 'Canada'; return i});
}
var strip_punctuation_from_name = function (items) {
return items.map(i => {i['name'] = i['name'].replace('.', '-');
return i});
}
以及以下各项的数组
var items = [{'name': 'John.Joo', 'height': 160, 'country':'US'},
{'name': 'Isla', 'height': 180, 'country':'France'},
{'name': 'Sam'}];
我把所有函数都放在一个数组中
var funcs = [updateCountryToCanada, strip_punctuation_from_name]
现在,我的问题是,如何在JavaScript中一次调用一个函数并将所有项目传递给它们,从而使第一个函数的结果成为第二个函数的输入,依此类推?我想将它们链接在一起(管道)。
最佳答案
您可以使用.reduce()
method:
var result = funcs.reduce((r, f) => f(r), items);
这将为
(r, f) => f(r)
数组中的每个项目调用funcs
函数。 r
第一次是items
。对于每个随后的r
,将是前一次调用返回的值。 f
是funcs
中的当前项目。展开代码片段以查看结果:
var updateCountryToCanada = function (items) {
return items.map(i => {i['country'] = 'Canada'; return i});
}
var strip_punctuation_from_name = function (items) {
return items.map(i => {i['name'] = i['name'].replace('.', '-');
return i});
}
var items = [{'name': 'John.Joo', 'height': 160, 'country':'US'},
{'name': 'Isla', 'height': 180, 'country':'France'}];
var funcs = [updateCountryToCanada, strip_punctuation_from_name];
var result = funcs.reduce((r, f) => f(r), items);
console.log(result);
关于javascript - 如何在Javascript中将一种方法的输出传递到另一种方法的输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38679005/