如何自动提取数据库对应值作为动态生成JS函数的入参使用
实现方案
可以通过参数映射+展开传参的方式实现自动传参,无需手动逐个定义变量,也不需要修改原函数的多参数定义:
- 先用
Array.prototype.map遍历externalValues.params,按顺序取出InternalValues中对应键的取值,生成参数值数组 - 用ES6扩展运算符
...或者函数apply方法把数组拆分为独立参数传入函数
修改后完整代码
// Values in DB const InternalValues = { phone: '123456789', old: '25' } //Values from external inputs, when params old=param1 and phone=param2 const externalValues = { data: `return function exec(param1,param2){ console.log("values",param1,param2) return [param1, param2] };`, params: ['old', 'phone'], } // Create a function const Func = new Function(externalValues.data)(); // 自动生成参数数组,参数新增时不需要修改此处逻辑 const execParams = externalValues.params.map(paramKey => InternalValues[paramKey]) // 执行函数:扩展运算符自动把数组拆为独立参数,和手动传参效果完全一致 const ii = Func(...execParams) // 旧环境兼容写法:const ii = Func.apply(null, execParams) console.log(ii);
说明
- 后续新增参数时,只需要同步修改
externalValues的params数组和函数形参定义即可,传参逻辑不需要做任何调整 - 该方案不需要把所有参数封装为单个数组作为唯一参数传入,原函数的多参数定义可以完全保留
内容的提问来源于stack exchange,提问作者renatosantos0611
相关产品推荐
相关产品推荐

