Set in Typescript

by Preetha Srinivasan

HTML

<link rel="stylesheet" href="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css">
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>

TypeScript

class MySet {

  data:any[];

  constructor() {
    this.data = [];
  }
  
  static fromArray(arr:any[]){
    const set = new this();
    arr.forEach(item => {
     set.add(item);
    });
    return set;
  }
  
  values() {
   return this.data;
  }
  
  sizeOfSet() {
   return this.data.length;
  }
  
  has(item:any) {
    return this.data.indexOf(item) != -1 ? true:false;
  }

  add(item:any){
   if (!this.has(item)){
     this.data.push(item);
     return true;
   }
     return false;
   
  }
  
  remove(item:any){
   if (this.has(item)){
    const index = this.data.indexOf(item);
    return this.data.splice(index,1) ? true:false;
   }
    return false;
  }
  
  union(set:MySet){
   var unionArr =  [...this.values(),...set.values()];
   var unionSet = new MySet();
   unionArr.map(item => {
     unionSet.add(item);
   });
   return unionSet;
  }
  
  intersect(set:MySet){
   var intersectionSet = new MySet();
   var _this = this;
   set.values().map(item => {
     if (_this.has(item)){
       intersectionSet.add(item);
     }
   })
   return intersectionSet;
  }
  
  difference(set:MySet){
   var differenceSet = new MySet();
   var _this = this;
   set.values().map(item => {
     if (!_this.has(item)){
       differenceSet.add(item);
     }
   })
   return differenceSet;
  }
  
  subset(set:MySet) {
    var isSubset = true;
    var _this = this;
    set.values().map(item => {
      if (!_this.has(item)){
       isSubset = false;
      }
    });
    return isSubset;
  }
   
}

describe("Set tests",function(){
  it("add operation",function(){
    var set = MySet.fromArray([1,2]);
    expect(set.sizeOfSet()).toEqual(2);
  });
  
  it("add duplicate operation",function(){
    var set = MySet.fromArray([1,1]);
    expect(set.sizeOfSet()).toEqual(1);
  });
  
  it("remove operation",function(){
    var set = MySet.fromArray([1,2]);
    expect(set.sizeOfSet()).toEqual(2);
    set.remove(1);
    expect(set.sizeOfSet()).toEqual(1);
  });
  
  it("union...