--- id: 587d8253367417b2b2512c6c title: Perform a Union on Two Sets challengeType: 1 --- ## Description
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'].
## Instructions
## Tests
```yml tests: - text: Your Set class should have a union method. testString: assert((function(){var test = new Set(); return (typeof test.union === 'function')})(), 'Your Set class should have a union method.'); - text: The union of ["a", "b", "c"] and ["c", "d"] should return ["a", "b", "c", "d"]. testString: 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)})(), 'The union of ["a", "b", "c"] and ["c", "d"] should return ["a", "b", "c", "d"].'); ```
## Challenge Seed
```js function Set() { // the var collection will hold the set var collection = []; // this method will check for the presence of an element and return true or false this.has = function(element) { return (collection.indexOf(element) !== -1); }; // this method will return all the values in the set this.values = function() { return collection; }; // this method will add an element to the set this.add = function(element) { if(!this.has(element)){ collection.push(element); return true; } return false; }; // this method will remove an element from a set this.remove = function(element) { if(this.has(element)){ var index = collection.indexOf(element); collection.splice(index,1); return true; } return false; }; // this method will return the size of the set this.size = function() { return collection.length; }; // change code below this line // change code above this line } ```
## Solution
```js function Set() { var collection = []; this.has = function(element) { return (collection.indexOf(element) !== -1); }; this.values = function() { return collection; }; this.add = function(element) { if(!this.has(element)){ collection.push(element); return true; } return false; }; this.remove = function(element) { if(this.has(element)){ var index = collection.indexOf(element); collection.splice(index,1); return true; } return false; }; this.size = function() { return collection.length; }; this.union = function(anotherSet){ const newSet = new Set(); const addToSet = el => newSet.add(el); this.values().forEach(addToSet); anotherSet.values().forEach(addToSet); return newSet; }; } ```