繁体   English   中英

具有多个参数的动态调用函数

[英]Dynamically call function with multiple arguments

我正在尝试从动态数量的数组中查找相似的项目,例如,我可能有2或3个数组,其中包含数据,并且想查找所有项目之间存在哪些项目。

在这一刻,我得到了这个“有效的”但非常丑陋的代码,无法扩展到3个项目以上。 GDAX,PLNX等都是bool,我可以告诉我是否选择了此选项。

交集是lodash的辅助函数,此处提供了更多信息https://lodash.com/docs/4.17.4#intersectionBy

  let similarItems = [];
  similarItems = GDAX && PLNX && BTRX ? _.intersectionBy(data.BTRX, data.PLNX, data.GDAX, 'pair') : similarItems;
  similarItems = GDAX && PLNX && !BTRX ? _.intersectionBy(data.PLNX, data.GDAX, 'pair') : similarItems;
  similarItems = GDAX && !PLNX && BTRX ? _.intersectionBy(data.BTRX, data.GDAX, 'pair') : similarItems;
  similarItems = !GDAX && PLNX && BTRX ? _.intersectionBy(data.BTRX, data.PLNX, 'pair') : similarItems;

这应该做的工作

const input = ['GDAX', 'PLNX', 'BTRX']; // here you pass the strings that are given

const result = _.intersectionBy.apply(_, input.map(name => data[name]).concat(['pair']));

输入也可以以某种方式实现自动化,例如为每个名称赋予对象true / false值,因此

const inputObject = { GDAX: true, PLNX: false, BTRX: true };

const names = ['GDAX', 'PLNX', 'BTRX'].filter(name => inputObject[name]);

const result = _.intersectionBy.apply(_, names.map(name => data[name]).concat(['pair']));

为了提高可读性和易于维护性,我将根据您的布尔标志明确构建选择项:

let selection = [];
if (GDAX) selection.push(data.GDAX);
if (PLNX) selection.push(data.PLNX);
if (BTRX) selection.push(data.BTRX);
const result = _.intersectionBy(...selection, 'pair'); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM