Javascript ES6设置比较并获取副本
假设4组数据有4个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()
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?谢谢☺️ 很好的解释谢谢☺️ 很好的解释