可以说我有一个如下的函数数组

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,将是前一次调用返回的值。 ffuncs中的当前项目。

展开代码片段以查看结果:



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/

10-12 15:18