Javascript函数数组:将每个函数作为参数传递给另一个函数

Javascript函数数组:将每个函数作为参数传递给另一个函数,javascript,Javascript,我有一个用户案例,其中我从后端获得一系列函数,比如: var arr = [A(){}, B(){}, C(){}]; 现在我需要一种执行它们的方法,以便数组中的每个函数都作为参数传递给数组中的另一个函数 A(B(C())); 我很好奇您是如何从后端获取函数的,但这与您的问题无关,因此下面是您的答案: var arr = [A(){}, B(){}, C(){}]; var value = arr[arr.length - 1](); for (var i = arr.length -

我有一个用户案例,其中我从后端获得一系列函数,比如:

var arr = [A(){}, B(){}, C(){}];
现在我需要一种执行它们的方法,以便数组中的每个函数都作为参数传递给数组中的另一个函数

A(B(C()));

我很好奇您是如何从后端获取函数的,但这与您的问题无关,因此下面是您的答案:

var arr = [A(){}, B(){}, C(){}];

var value = arr[arr.length - 1]();

for (var i = arr.length - 2; i >= 0; i--) {
 value = arr[i](value);
}

console.log(value);

我很好奇您是如何从后端获取函数的,但这与您的问题无关,因此下面是您的答案:

var arr = [A(){}, B(){}, C(){}];

var value = arr[arr.length - 1]();

for (var i = arr.length - 2; i >= 0; i--) {
 value = arr[i](value);
}

console.log(value);

您可以使用
Array.prototype.reduce
执行对函数列表的连续调用

更新:正如ASDFGerte所建议的,您可以使用
reduceRight
而不是
reduce
来反转函数执行流程

const text='这将是3.50';
const funcList=[extractNumber,parseNumeric,formatCurrency];
log('Parsed:',chainFunctions(funcList,text));
log('Parsed:',chainFunctionsReverse(funcList.reverse(),text));
函数链函数(函数列表,起始值){
返回funcList.reduce((result,func)=>func(result),startingValue);
}
函数链FunctionsReverse(函数列表,起始值){
返回funcList.reduceRight((result,func)=>func(result),startingValue);
}
函数编号(str){
返回str.match(/\b(\d+(\.\d+?\b)/)[1];
}
函数parseNumeric(numStr){
返回浮点(numStr);
}
函数格式货币(num){
返回`${num.toFixed(2)}`;
}

.as console wrapper{top:0;max height:100%!important;}
您可以使用
Array.prototype.reduce
执行对函数列表的连续调用

更新:正如ASDFGerte所建议的,您可以使用
reduceRight
而不是
reduce
来反转函数执行流程

const text='这将是3.50';
const funcList=[extractNumber,parseNumeric,formatCurrency];
log('Parsed:',chainFunctions(funcList,text));
log('Parsed:',chainFunctionsReverse(funcList.reverse(),text));
函数链函数(函数列表,起始值){
返回funcList.reduce((result,func)=>func(result),startingValue);
}
函数链FunctionsReverse(函数列表,起始值){
返回funcList.reduceRight((result,func)=>func(result),startingValue);
}
函数编号(str){
返回str.match(/\b(\d+(\.\d+?\b)/)[1];
}
函数parseNumeric(numStr){
返回浮点(numStr);
}
函数格式货币(num){
返回`${num.toFixed(2)}`;
}
.as控制台包装{top:0;最大高度:100%!重要;}
arr.reduceRight((p,c)=>c(p),未定义)
arr.reduceRight((p,c)=>c(p),未定义)