this.intersection = function(otherSet) { // 创建一个新的Set实例,这样就能用它返回共有的元素 let intersectionSet = new Set(); let values = this.vlues(); // 遍历当前Set实例所有的值 for (let i=0; i<values.length; i++) { if(otherSet.has(values[i])){ intersectionSet.add(values[i]); } } return intersectionSet; }
差集
表示A-B,x元素存在于A中,且x不存在于B中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
this.difference = function(otherSet){ // 得到所有同时存在于两个集合中的值 let differenceSet = new Set(); let values = this.values(); // for(let i=0; i<values.length; i++){ // if(!otherSet.has(values[i])){ // 会得到所有存在于集合A但不存在于B的值 differenceSet.add(values[i]); } } return differenceSet };
子集
集合A是集合B的子集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
this.subset = function(otherSet){ if (this.size() > otherSet.size()){ //需要验证的是当前Set实例的大小 return false; // 如果当前实例中的元素比otherSet实例更多,它就不是一个子集 } else { let values = this.values(); for (let i=0; i<values.length; i++){ //要遍历集合中的所有元素 if (!otherSet.has(values[i])){ //验证这些元素也存在于otherSet中 return false; //如果有任何元素不存在于otherSet中,就意味着它不是一个子集,返回false } } return true; //如果所有元素都存在于otherSet中,那么就返回true } };
Set类
1 2 3 4 5 6 7
let set = new Set(); set.add(1); // ES6的Set的values方法返回Iterator // 而不是值构成的数组 console.log(set.values()); // 输出@Iterator console.log(set.has(1)); // 输出true console.log(set.size); // 输出1
ES6 Set 类
1 2 3 4 5 6 7 8 9
let setA = new Set(); setA.add(1); setA.add(2); setA.add(3);
let setB = new Set(); setB.add(2); setB.add(3); setB.add(4);
并集
1 2 3 4 5 6
let unionAb = new Set(); //创建一个新的集合,用来添加两个集合中所有的元素 //迭代这两个集合 for (let x of setA) unionAb.add(x);
for (let x of setB) unionAb.add(x);
交集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// 创建一个辅助函数 // 来生成包含setA和setB都有的元素的新集合 let intersection = function(setA, setB) {
let intersectionSet = new Set(); for (let x of setA) { if (setB.has(x)) { intersectionSet.add(x); } } return intersectionSet; }; let intersectionAB = intersection(setA, setB);
简单语法:
1
intersectionAb = new Set([x for (x of setA) if (setB.has(x))]);
差集
1 2 3 4 5 6 7 8 9 10 11 12 13 14
let difference = function(setA, setB) {
let differenceSet = new Set(); for (let x of setA) { if (!setB.has(x)) { // 差集中只添加setA有而setB没有的元素 differenceSet.add(x); } } return differenceSet; }; let differenceAB = difference(setA, setB);
简单语法:
1
differenceAB = new Set([x for (x of setA) if (!setB.has(x))]);