function MySet() {
// 初始化
this.items = {};
// 添加元素
MySet.prototype.add = function(data) {
if(this.has(data)) return false;
Object.defineProperty(this.items, data, {
value : data, // 该data属性的值,默认undefine
writable : true, // 该data属性的值可修改,默认false
enumerable : true, // 该data属性可枚举,默认false
configurable : true // 该data属性可修改,默认false
});
//this.items[data] = data; 等价?
return true;
}
// 判断是否含有改属性
MySet.prototype.has = function(data) {
return this.items.hasOwnProperty(data);
}
MySet.prototype.remove = function(data) {
if(!this.has(data)) return false;
delete this.items[data];
return true;
}
MySet.prototype.clear = function() {
this.items = {};
}
MySet.prototype.size = function() {
return Object.keys(this.items).length;
}
// 打印元素
MySet.prototype.values = function() {
return Object.keys(this.items);
}
/*集合间的操作 */
//并集
MySet.prototype.union = function(otherSet) {
// 创建并集
var unionSet = new MySet();
// 将当前对象的属性复制给并集
for (const key in this.items) {
if (this.items.hasOwnProperty(key)) {
unionSet.add(key);
}
}
// 将另外一个集合复制给并集
for (const key in otherSet.items) {
if (otherSet.items.hasOwnProperty(key)) {
unionSet.add(key);
}
}
// 返回并集
return unionSet;
}
// 交集
MySet.prototype.intersection = function(otherSet) {
var intersection = new MySet();
for (const key in this.items) {
if (this.items.hasOwnProperty(key)) {
if (otherSet.items.hasOwnProperty(key)) {
intersection.add(key);
}
}
}
return intersection;
}
// 差集 返回 我有 otherSet没有的元素
MySet.prototype.difference = function(otherSet) {
var difference = new MySet();
for (const key in this.items) {
if (this.items.hasOwnProperty(key)) {
if (!otherSet.items.hasOwnProperty(key)) {
difference.add(key);
}
}
}
return difference;
}
// 子集 判断 我的所有元素 otherset都有
MySet.prototype.subSet = function(otherSet) {
for (const key in this.items) {
if (this.items.hasOwnProperty(key)) {
if (!otherSet.items.hasOwnProperty(key)) {
return false;
}
}
}
return this.size() > otherSet.size() ? false:true ;
}
}
var ms = new MySet();
ms.add("2")
ms.add("3")
var other = new MySet();
other.add("3")
other.add("8")
other.add("9")
console.log(ms.subSet(other))