集合(set) 是一种包含不同元素的数据结构。 集合中的元素称为成员。
集合的两个最重要特性是: 首先, 集合中的成员是无序的; 其次, 集合中不允许相同成员存在。
对集合的三个操作
并集
将两个集合中的成员进行合并, 得到一个新集合。
交集
两个集合中共同存在的成员组成一个新的集合。
差集
属于一个集合而不属于另一个集合的成员组成的集合。
子集
一个集合包含另一个集合的所有成员。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>集合</title>
</head>
<body>
<script>
function Set(){
this.items={}
}
//add 添加集合元素
Set.prototype.add=function(value){
if(this.has(value)) return false
this.items[value] =value
return true
}
//has 集合包含某个元素
Set.prototype.has=function(value){
return this.items.hasOwnProperty(value)
}
//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(value){
return Object.keys(this.items).length
}
//values 返回所有集合的值
Set.prototype.values=function(value){
return Object.keys(this.items)
}
//集合间的操作
//union并集
Set.prototype.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 交集
Set.prototype.intersection=function(othterSet){
var intersectionSet=new Set()
var values=this.values()
for(var i=0;i<values.length;i++){
if(othterSet.has(values[i])){
intersectionSet.add(values[i])
}
}
return intersectionSet
}
//difference 差集
Set.prototype.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 子集
Set.prototype.subset=function(otherSet){
var values=this.values()
for(var i=0;i<values.length;i++){
if(!otherSet.has(values[i])){
return false
}
}
return true
}
// var set = new Set()
// set.add('a')
// set.add('b')
// set.add('c')
// console.log(set.add('b'))
// set.remove('c')
// console.log(set.has('a'))
// console.log(set.size())
// console.log(set.items)
var setA=new Set()
var setB=new Set()
setA.add('a')
setA.add('b')
setA.add('c')
setA.add('d')
setA.add('e')
setB.add('a')
setB.add('s')
setB.add('j')
setB.add('f')
setB.add('g')
console.log(setA.union(setB),"并集")
console.log(setA.intersection(setB),"交集")
console.log(setA.difference(setB),"差集")
console.log(setA.subset(setB),"是否是子集")
</script>
</body>
</html>