结合结构封装:包括添加,删除,清空,判断是否包含某个值,集合大小,集合所有值,集合交集,并集,差集和子集
function Set() {
this.items = {}
Set.prototype.add = function (value) {
if (this.has(value)) {
return false
}
this.items[value] = value
return true
}
Set.prototype.has = function (value) {
return this.items.hasOwnProperty(value)
}
Set.prototype.remove = function (value) {
if (!this.has(value)) {
return false
}
delete this.items[value]
return true
}
Set.prototype.clear = function () {
this.items = {}
}
Set.prototype.size = function () {
return Object.keys(this.items).length
}
Set.prototype.values = function () {
return Object.keys(this.items)
}
Set.prototype.union = function (othersSet) {
let union = new Set()
let values = this.values()
for(let i = 0; i < values.length; i++) {
union.add(values[i])
}
let othersValues = othersSet.values()
for(let i = 0; i < othersValues.length; i++) {
union.add(othersValues[i])
}
return union
}
Set.prototype.interSection = function (otherSet) {
let interSection = new Set()
let values = this.values()
for(let i = 0; i < values.length; i++){
if (otherSet.has(values[i])) {
interSection.add(values[i])
}
}
return interSection
}
Set.prototype.difference = function (otherSet) {
let difference = new Set()
let values = this.values()
for(let i = 0; i < values.length; i++){
if (!otherSet.has(values[i])) {
difference.add(values[i])
}
}
return difference
}
Set.prototype.subset = function (otherSet) {
let subset = new Set()
let values = this.values()
for(let i = 0; i < values.length; i++){
if (!otherSet.has(values[i])) {
return false
}
}
return true
}
}