<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
function Set()
{
this.dataStore=[];//初始化空数组保存Set元素
this.add=add;//向集合中增加元素
this.remove=remove;//删除集合中的元素
this.union=union;//执行集合的并集操作,将两个集合合并成一个
this.interSect=interSect;//求两个集合的交集
this.subset=subset;//判断一个集合是否是另一个集合的子集
this.difference=difference;//求两个集合的补集
this.show=show;
}
//add方法
function add(data)
{
if (this.dataStore.indexOf(data)<0)//首先判断要添加的元素是否存在于该集合
{
this.dataStore.push(data);//添加元素
return true;//正确的在Set中添加元素,返回True
}
else
{
return false;//否则返回false
}
}
//remove方法:首先检查要删除的元素在Set中是否存在,存在的话,使用splice()方法删除
function remove(data)
{
if (this.dataStore.indexOf(data)>-1)
{
var position=this.dataStore.indexOf(data);//获取要删除元素的位置
this.dataStore.splice(position,1);
return true;
}
else
{
return false;
}
}
//union方法:将第一个集合的元素加入临时集合,然后查看第二个集合中的元素是否属于第一个集合中的元素,如果属于,则跳过该成员;否则就将该成员加入临时集合
function union(set)
{
var tempSet=new Set();//定义临时集合
for(var i=0;i<this.dataStore.length;i++)
{
tempSet.add(this.dataStore[i]);
}
for (var i=0;i<set.dataStore.length;i++)
{
if (tempSet.dataStore.indexOf(set.dataStore[i])<0)//这里使用了contains方法
{
tempSet.dataStore.push(set.dataStore[i]);
}
}
return tempSet;
}
//补集方法intersect():第一个集合的成员也属于第二个集合
function interSect(set)
{
var tempSet=new Set();
for (var i=0;i<this.dataStore.length;i++)
{
if (set.dataStore.indexOf(this.dataStore[i])>-1)
{
tempSet.add(this.dataStore[i]);
}
}
return tempSet;
}
//子集方法subset():首先确定该集合的长度是否小于待比较集合。
//如果该集合比待比较集合大,那么该集合肯定不是待比较集合的一个子集;
//当该集合的长度小于待比较集合时,在判断该集合内的成员是否都属于待比较集合;
//如果有任意一个成员不属于比较集合,则返回false,程序终止
function subset(set)
{
if (this.dataStore.length>set.dataStore.length)
{
return false;
}
else
{
for (var i = 0; i < this.dataStore.length; i++)
{
if (set.dataStore.indexOf(this.dataStore[i])<0)
{
return false;
}
}
}
return true;
}
//补集方法difference:返回一个新的集合,该集合是那些属于第一个集合但是不属于第二个集合的成员
function difference(set)
{
var tempSet=new Set();
for (var i=0;i<this.dataStore.length;i++)
{
if (set.dataStore.indexOf(this.dataStore[i])<0)
{
tempSet.add(this.dataStore[i]);
}
}
return tempSet;
}
//显示Set元素的方法
function show()
{
return this.dataStore;
}
//测试add方法
var names=new Set();//实例化集合
names.add("Huaicui Zheng");
names.add("Mingsi Zhang");
names.add("Qin Han");
names.add("RUigang Zhao");
names.add("Peiang Zuo");
console.log(names.show());/*["Huaicui Zheng", "Mingsi Zhang", "Qin Han", "RUigang Zhao", "Peiang Zuo"]*/
if (names.add("Qin Han"))
{
console.log("Qin Han is added successfully!");/*Qin Han has been added,please checked again!*/
}
else
{
console.log("Qin Han has been added,please checked again!");
}
if (names.add("Jie Yang"))
{
console.log("JIe Yang is added successfully!");/*Qin Han has been added,please checked again!*/
}
else
{
console.log("Qin Han has been added,please checked again!");/*JIe Yang is added successfully!*/
}
//测试remove方法
var removedNames="Peiang Zuo";
if (names.remove(removedNames))
{
console.log( removedNames+"is removed.");/*Peiang Zuois removed.*/
}
else
{
console.log(removedNames+"is not existed.");
}
console.log(names.show());/* ["Huaicui Zheng", "Mingsi Zhang", "Qin Han", "RUigang Zhao", "Jie Yang"]*/
var removedNames="Mike";
if (names.remove(removedNames))
{
console.log( removedNames+"is removed.");
}
else
{
console.log(removedNames+"is not existed.");/*Mikeis not existed.*/
}
console.log(names.show());/*["Huaicui Zheng", "Mingsi Zhang", "Qin Han", "RUigang Zhao", "Jie Yang"]*/
//union方法
var cis=new Set();//集合cis
cis.add('Mike');
cis.add('Clayton');
cis.add('Jennifer');
cis.add('Raymond');
var dmp=new Set();//集合dmp
dmp.add("Raymond");
dmp.add("Cynthia");
dmp.add("Jonathan");
var newNrr=new Set();//取union之后的集合
newNrr=cis.union(dmp);
console.log(newNrr.show());/* ["Mike", "Clayton", "Jennifer", "Raymond", "Cynthia", "Jonathan"]*/
//交集方法
var ciss=new Set();
ciss.add("Mike");
ciss.add("Clayton");
ciss.add("Jennifer");
var dmpp=new Set();
dmpp.add("Raymond");
dmpp.add("Cynthia");
dmpp.add("Jennifer");
var newNrr1=new Set();//取union之后的集合
newNrr1=ciss.interSect(dmpp);
console.log(newNrr1.show());/*["Jennifer"]*/
//子集方法subset
var it1=new Set();
it1.add("Cynthia");
it1.add("Clayton");
it1.add("Danny");
it1.add("Mike");
it1.add("Terrill");
var dmp1=new Set();
dmp1.add("Cynthia");
dmp1.add("Clayton");
dmp1.add("Terrill");
if (dmp1.subset(it1))
{
console.log("dmp1 is the subset of the it1");/*dmp1 is the subset of the it1*/
}
else
{
console.log("dmp is not the subset of the it1");
}
//补集方法
var cisss=new Set();
var itt=new Set();
cisss.add("Clayton");
cisss.add("Danny");
cisss.add("Jennifer");
cisss.add("Huaicui Zheng");
itt.add("Clayton");
itt.add("Danny");
itt.add("Mike");
itt.add("lily");
var diff=new Set();
diff=cisss.difference(itt);
console.log("The difference is"+diff.show());/*Jennifer,Huaicui Zheng*/
</script>
</body>
</html>