function Set(){
this.items = {}
//has方法
Set.prototype.has = function(value){
return this.items.hasOwnProperty(value)
}
//add方法
Set.prototype.add = function(value){
//value 如果存在 如果不存在
if(this.has(value)){
return false
}
this.items[value] = value
return true
}
//remove方法
Set.prototype.remove = function(value){
if(!this.has(value)) return false
delete this.items[value]
return true
}
//clear方法
Set.prototype.clear = function(){
this.items = {}
}
//size方法
Set.prototype.size = function(){
return Object.keys(this.items).length
}
//values方法 获取set中所有的值
Set.prototype.values = function(){
return Object.keys(this.items)
}
//union方法 并集
Set.prototype.union = function(otherSet){
//this 是A集合 otherSet 是B集合
//创建新集合 将A中元素add进去,再将B中元素add进去
let unionSet = new Set()
let values = this.values()
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
values = otherSet.values()
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
return unionSet
}
//intersection 交集
Set.prototype.intersection = function(otherSet){
//创建新集合 遍历A,判断元素是否存在于B中
let intersectionSet = new Set()
let setA = this.values()
for(let i = 0;i<setA.length;i++){
let value = setA[i]
if(otherSet.has(value)){
intersectionSet.add(value)
}
}
return intersectionSet
}
//diffsection方法 差集
Set.prototype.diffsection = function(otherSet){
//创建新集合, 遍历A 判断元素不存在B中
let diffsection = new Set()
let setA = this.values()
for(let i = 0;i<setA.length;i++){
let value = setA[i]
if(!otherSet.has(value)){
diffsection.add(value)
}
}
return diffsection
}
//subset方法 子集
Set.prototype.subset = function(otherSet){
//创建新集合 遍历A 如果存在不属于B的元素 return false
let subset = new Set()
let setA = this.values()
for(let i = 0;i<setA.length;i++){
let value = setA[i]
if(!otherSet.has(value))
return false
}
return true
}
}
集合的封装(交集,并集,子集,差集)
最新推荐文章于 2022-12-27 10:22:25 发布
本文介绍了一种使用JavaScript实现的自定义Set数据结构,并详细解释了其核心方法,包括has、add、remove、clear、size及values等。此外,还探讨了如何利用这些基本操作实现集合的并集、交集、差集以及子集判断等功能。
摘要由CSDN通过智能技术生成