function Set() { this.dataStore = []; this.add = add; this.remove = remove; this.show = show; this.contains = contains; this.union = union; this.intersect = intersect; this.size = size; this.subset = subset; this.difference = difference; } function add(data) { if (this.dataStore.indexOf(data) < 0) { this.dataStore.push(data); return true; } else { return false; } } function remove(data) { var pos = this.dataStore.indexOf(data); if (pos > -1) { this.dataStore.splice(pos, 1); return true; } else { return false; } } function show() { return this.dataStore; } var names = new Set(); names.add("David"); names.add("Jennifer"); names.add("Mike"); names.add("Raymond"); if (names.add("Mike")) { document.write("Mike added" + "<br />") } else { document.write("Can't add Mike, must already be in set" + "<br />"); } document.write(names.show() + "<br />"); var removed = "Mike"; if (names.remove(removed)) { document.write(removed + " removed." + "<br />"); } else { document.write(removed + " not removed." + "<br />"); } names.add("Clayton"); document.write(names.show() + "<br />"); document.write("****************" + "<br />"); function contains(data) { if (this.dataStore.indexOf(data) > -1) { return true; } else { return false; } } function union(set) {//并操作 var tempSet = new Set(); for ( var i = 0; i < this.dataStore.length; ++i) {//this指的是cis tempSet.add(this.dataStore[i]);//将cis集合添加到tempSet临时集合 } for ( var i = 0; i < set.dataStore.length; ++i) { if (!tempSet.contains(set.dataStore[i])) {//判断临时集合中是否包含dmp集合中的元素 tempSet.dataStore.push(set.dataStore[i]); //tempSet.add(set.dataStore[i]); } } return tempSet; } var cis = new Set(); cis.add("Mike"); cis.add("Clayton"); cis.add("Raymond"); var dmp = new Set(); dmp.add("Raymond"); dmp.add("Clayton"); var it = new Set(); it = cis.union(dmp); document.write(it.show() + "<br />"); document.write("****************" + "<br />"); function intersect(set) {//交操作 var tempSet = new Set(); for ( var i = 0; i < this.dataStore.length; ++i) { if (set.contains(this.dataStore[i])) { tempSet.add(this.dataStore[i]); } } return tempSet; } it = cis.intersect(dmp); document.write(it.show() + "<br />"); document.write("****************" + "<br />"); function size() { return this.dataStore.length; } function subset(set) { if (this.size() > set.size()) { return false; } else { for ( var member in this.dataStore) { if (!set.contains(this.dataStore[member])) { return false; } } } return true; } if (it.subset(dmp)) {//判断it集合是否包含于dmp集合 document.write("IT is a subset of DMP."); } else { document.write("IT is not a subset of DMP."); } document.write("<br />"); document.write("****************" + "<br />"); function difference(set) {//返回一个属于第一个集合但不属于第二个集合的新集合 var tempSet = new Set(); for ( var i in this.dataStore) { if (!set.contains(this.dataStore[i])) { tempSet.add(this.dataStore[i]); } } return tempSet; } it = cis.difference(dmp); document.write(it.show()); /*上述程序运行的结果如下: Can't add Mike, must already be in set David,Jennifer,Mike,Raymond Mike removed. David,Jennifer,Raymond,Clayton **************** Mike,Clayton,Raymond **************** Clayton,Raymond **************** IT is a subset of DMP. **************** Mike */