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...