Javascript ES6设置比较并获取副本

Javascript ES6设置比较并获取副本,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,假设4组数据有4个ES6集 state = { aSet: new Set().add(1).add(2).add(3).add(4).add(5), // 1,2,3,4,5 bSet: new Set().add(2).add(3).add(4).add(5).add(6), // 2,3,4,5,6 cSet: new Set().add(3).add(4).add(5).add(6).add(7), // 3,4,5,6,7 dSet: new Set()

假设4组数据有4个ES6集

state = {
    aSet: new Set().add(1).add(2).add(3).add(4).add(5), // 1,2,3,4,5
    bSet: new Set().add(2).add(3).add(4).add(5).add(6), // 2,3,4,5,6
    cSet: new Set().add(3).add(4).add(5).add(6).add(7), // 3,4,5,6,7
    dSet: new Set().add(4).add(5).add(6).add(7).add(8)  // 4,5,6,7,8
}
现在我想比较这4个ES6集合,得到重复的4,5以形成一个新集合

任何建议???

您可以使用设置交点原则来执行此操作

通过使用Arrayreduce检查状态中的每个集合,我们将上一次迭代中的旧集合与当前迭代中的新集合进行比较,并且只返回两者的交集

第一次迭代不进行比较,因为它以第一个集合为起点:

常量状态={ aSet:new Set.add1.add2.add3.add4.add5,//1,2,3,4,5 bSet:new Set.add2.add3.add4.add5.add6,//2,3,4,5,6 cSet:new Set.add3.add4.add5.add6.add7,//3,4,5,6,7 数据集:new Set.add4.add5.add6.add7.add8//4,5,6,7,8 } 常量交点=集合=>{ return set.reduceprevSet,nextSet,idx=>{ 如果idx==0,则返回nextSet; 返回新集合[…nextSet].filtere=>prevSet.hase; },新一套; } 常量集=Object.valuesstate; console.log[…交叉集] 可以使用“设置交点”原则来执行此操作

通过使用Arrayreduce检查状态中的每个集合,我们将上一次迭代中的旧集合与当前迭代中的新集合进行比较,并且只返回两者的交集

第一次迭代不进行比较,因为它以第一个集合为起点:

常量状态={ aSet:new Set.add1.add2.add3.add4.add5,//1,2,3,4,5 bSet:new Set.add2.add3.add4.add5.add6,//2,3,4,5,6 cSet:new Set.add3.add4.add5.add6.add7,//3,4,5,6,7 数据集:new Set.add4.add5.add6.add7.add8//4,5,6,7,8 } 常量交点=集合=>{ return set.reduceprevSet,nextSet,idx=>{ 如果idx==0,则返回nextSet; 返回新集合[…nextSet].filtere=>prevSet.hase; },新一套; } 常量集=Object.valuesstate; console.log[…交叉集] 您可以这样做:

常量状态={ aSet:new Set.add1.add2.add3.add4.add5,//1,2,3,4,5 bSet:new Set.add2.add3.add4.add5.add6,//2,3,4,5,6 cSet:new Set.add3.add4.add5.add6.add7,//3,4,5,6,7 数据集:new Set.add4.add5.add6.add7.add8//4,5,6,7,8 } 让交叉点=新集合[…state.aSet].filterx=>state.bSet.hasx&&state.cSet.hasx&&state.dSet.hasx intersection.forEachvalue=>console.logvalue您可以执行以下操作:

常量状态={ aSet:new Set.add1.add2.add3.add4.add5,//1,2,3,4,5 bSet:new Set.add2.add3.add4.add5.add6,//2,3,4,5,6 cSet:new Set.add3.add4.add5.add6.add7,//3,4,5,6,7 数据集:new Set.add4.add5.add6.add7.add8//4,5,6,7,8 } 让交叉点=新集合[…state.aSet].filterx=>state.bSet.hasx&&state.cSet.hasx&&state.dSet.hasx console.logvalueconst aSet=new Set.add1.add2.add3.add4.add5;//1,2,3,4,5 const bSet=new Set.add2.add3.add4.add5.add6;//2,3,4,5,6 const cSet=new Set.add3.add4.add5.add6.add7;//3,4,5,6,7 const dSet=new Set.add4.add5.add6.add7.add8;//4,5,6,7,8 const allSet=新集合[…aSet,…bSet,…cSet,…dSet]; const result=[…allSet].reduceAC,elm=>{ 如果aSet.haselm&&bSet.haselm&&cSet.haselm&&dSet.haselm 附录; 返回acc; },新一套; console.logresult; const aSet=new Set.add1.add2.add3.add4.add5;//1,2,3,4,5 const bSet=new Set.add2.add3.add4.add5.add6;//2,3,4,5,6 const cSet=new Set.add3.add4.add5.add6.add7;//3,4,5,6,7 const dSet=new Set.add4.add5.add6.add7.add8;//4,5,6,7,8 const allSet=新集合[…aSet,…bSet,…cSet,…dSet]; const result=[…allSet].reduceAC,elm=>{ 如果aSet.haselm&&bSet.haselm&&cSet.haselm&&dSet.haselm 附录; 返回acc; },新一套; console.logresult;
交叉口示例来自:

常量状态={ aSet:new Set.add1.add2.add3.add4.add5,//1,2,3,4,5 bSet:new Set.add2.add3.add4.add5.add6,//2,3,4,5,6 cSet:new Set.add3.add4.add5.add6.add7,//3,4,5,6,7 数据集:new Set.add4.add5.add6.add7.add8//4,5,6,7,8 } const intersection=a,b=>新集合[…a].filteritem=>b.hasitem; const crossions=object=>object.valuesobject.reduceintersection;
console.logArray.fromintersectionsstate.join',' 交叉口示例来自:

常量状态={ aSet:new Set.add1.add2.add3.add4.add5,//1,2,3,4,5 bSet:new Set.add2.add3.add4.add5.add6,//2,3,4,5,6 cSet:new Set.add3.add4.add5.add6.add7,//3,4,5,6,7 数据集:new Set.add4.add5.add6.add7.add8//4,5,6,7,8 } const intersection=a,b=>新集合[…a].filteritem=>b.hasitem; const crossions=object=>object.valuesobject.reduceintersection;
console.logArray.fromintersectionsstate.join',';你的意思是如果aSet有数字4,如果bSet也有数字4,把4放入eSet?你的意思是如果aSet有数字4,如果bSet也有数字4,把4放入eSet?谢谢☺️ 很好的解释谢谢☺️ 很好的解释