我正在尝试在动态数量的数组中找到相似的项目。例如,我可能有2或3个数组,其中包含数据,并希望找到所有数据之间存在的项目。
在我得到这个“工作”的那一刻,但是真正难看的代码不能超过3个项目。 GDAX,PLNX等都是bool,我可以告诉我这个选项是否被选中。
intersectionBy是一个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;
答案 0 :(得分:2)
这应该做的工作
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']));
答案 1 :(得分:2)
为了便于阅读和易于维护,我将根据您的布尔标志显式构建选择:
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');