function Set(){ this.items={}; } Set.prototype={ add:function(value){ if(!this.has(value)){ this.items[value] = value; return true; } return false; }, remove:function(value){ if(this.has(value)){ delete this.items[value]; return true; } return false; }, has:function(value){ //return value in this.items; return this.items.hasOwnProperty(value); }, clear:function(){ this.items = {}; }, size:function(){ return Object.keys[this.items].length; // var count = 0; // for(var prop in this.items){ // if(this.items.hasOwnProperty(prop)){ // ++count; // } // } // return count; }, values:function(){ return Object.keys(this.items); }, //并集 union:function(otherSet){ var unionSet = new Set(); var values = this.values(); for(var i=0;i<values.length;i++){ unionSet.add(values[i]); } values = otherSet.values(); for(var i=0;i<values.length;i++){ unionSet.add(values[i]); } return unionSet; }, //交集 intersection:function(otherSet){ var intersectionSet = new Set(); var values = this.values(); for(var i=0;i<values.length;i++){ if(otherSet.has(values[i])){ intersectionSet.add(values[i]); } } return intersectionSet; }, //差集 difference:function(otherSet){ var differenceSet = new Set(); var values = this.values(); for(var i=0;i<values.length;i++){ if(!otherSet.has(values[i])){ differenceSet.add(values[i]); } } return differenceSet; }, //子集 subset:function(otherSet){ if(this.size()>otherSet.size()){ return false; } else { var values = this.values(); for(var i=0;i<values.length;i++){ if(!otherSet.has(values[i])){ return false; } } return true; } } };