2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								id: 587d8253367417b2b2512c6c
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								title: Perform a Union on Two Sets
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								challengeType: 1
							 
						 
					
						
							
								
									
										
										
										
											2019-08-05 09:17:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								forumTopicId: 301708
							 
						 
					
						
							
								
									
										
										
										
											2021-01-13 03:31:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								dashedName: perform-a-union-on-two-sets
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# --description--
  
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								In this exercise we are going to perform a union on two sets of data. We will create a method on our `Set`  data structure called `union` . This method should take another `Set`  as an argument and return the `union`  of the two sets, excluding any duplicate values.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For example, if `setA = ['a','b','c']`  and `setB = ['a','b','d','e']` , then the union of setA and setB is: `setA.union(setB) = ['a', 'b', 'c', 'd', 'e']` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --hints--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Your `Set`  class should have a `union`  method.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (function () {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    var test = new Set();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return typeof test.union === 'function';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-02-01 15:42:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The union of a Set containing values ["a", "b", "c"] and a Set containing values ["c", "d"] should return a new Set containing values ["a", "b", "c", "d"].
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (function () {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    var setA = new Set();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    var setB = new Set();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setA.add('a');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setA.add('b');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setA.add('c');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setB.add('c');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    setB.add('d');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    var unionSetAB = setA.union(setB);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    var final = unionSetAB.values();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      final.indexOf('a') !== -1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      final.indexOf('b') !== -1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      final.indexOf('c') !== -1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      final.indexOf('d') !== -1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      final.length === 4
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --seed--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## --seed-contents--
  
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class Set {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    // This will hold the set
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.dictionary = {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.length = 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // This method will check for the presence of an element and return true or false
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  has(element) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return this.dictionary[element] !== undefined;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // This method will return all the values in the set
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  values() {
							 
						 
					
						
							
								
									
										
										
										
											2021-02-01 15:42:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return Object.values(this.dictionary);
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // This method will add an element to the set
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  add(element) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (!this.has(element)) {
							 
						 
					
						
							
								
									
										
										
										
											2021-02-01 15:42:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this.dictionary[element] = element;
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this.length++;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return true;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return false;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // This method will remove an element from a set
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  remove(element) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (this.has(element)) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      delete this.dictionary[element];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this.length--;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return true;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return false;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // This method will return the size of the set
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  size() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return this.length;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Only change code below this line
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 12:31:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Only change code above this line
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# --solutions--
  
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class Set {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.dictionary = {};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.length = 0;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  has(element) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return this.dictionary[element] !== undefined;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  values() {
							 
						 
					
						
							
								
									
										
										
										
											2021-02-01 15:42:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return Object.values(this.dictionary);
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  add(element) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (!this.has(element)) {
							 
						 
					
						
							
								
									
										
										
										
											2021-02-01 15:42:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this.dictionary[element] = element;
							 
						 
					
						
							
								
									
										
										
										
											2020-04-22 13:44:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      this.length++;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return true;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return false;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  remove(element) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (this.has(element)) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      delete this.dictionary[element];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this.length--;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return true;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return false;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  size() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return this.length;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  union(set) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const newSet = new Set();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.values().forEach(value => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      newSet.add(value);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    })
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set.values().forEach(value => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      newSet.add(value);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    })
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return newSet;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2018-12-16 21:08:35 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2018-09-30 23:01:58 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								```