目录
一、数据结构中的集合有什么特点。
1.集合通常是无序的。
2.集合中的元素不允许重复。
二、集合的封装。
使用一个对象来保存集合的元素,在这里说明一下不使用数组来存储集合的原因:因为数组是允许元素重复的,但是集合不允许其中的元素重复,所以减少一些查找与判断。
function Set(){
// 属性
this.items = {}
}
三、集合相关操作。
1、向集合添加一个新的项,方法add(value)。
Set.prototype.add = function(value){
// 判断集合是否已经存在该元素
if (this.has(value)) return false;
// 将元素添加到集合中
this.items[value] = value;
return true;
}
2、方法has(value),判断集合是否已经存在某元素。
Set.prototype.has = function(value){
return this.items.hasOwnProperty(value);
}
3、clear()移除集合中的所有项。
Set.prototype.clear = function(){
// 重新赋值一个对象
this.items = {};
}
4、remove(value)从集合中移除一个值。
Set.prototype.remove = function(value){
// 4.1 首先判断集合中是否含有该元素
if (!this.has(value)) return false;
// 4.2 移除该元素
delete this.items[value];
return true;
}
5、获取集合的大小。
Set.prototype.size = function(){
return Object.keys(this.items).length;
}
6、获取集合中所有的值。
Set.prototype.values = function(){
return Object.keys(this.items);
}
四、集合之间的操作。
1、A∪B。
对于给定的两个集合,返回一个包含两个集合中所有的元素的新集合。
Set.prototype.union = function(setB){
// this:集合对象A
// setB:集合对象B
// 1、创建一个新的集合
var unionSet = new Set();
// 2、将A中的所有元素集合添加到新的集合中
var values = this.values();
for (var i = 0; i < values.length; i++) {
unionSet.add(values[i]);
}
// 3、将在A中不存在的B中的元素添加到新集合中
var values = setB.values();
for (var i = 0; i < values.length; i++) {
unionSet.add(values[i]);
}
return unionSet;
}
2、 A∩B。
两个集合的交集。
Set.prototype.interSection = function(setB){
// this:集合对象A
// setB:集合对象B
// 1、创建一个新的集合
var interSectionSet = new Set();
// 2、将同时存在A和B中的元素添加到新的集合中
var values = setB.values();
for (var i = 0; i < values.length; i++) {
if (this.has(values[i]))
interSectionSet.add(values[i]);
}
return interSectionSet;
}
3、 A-B。
两个集合的差集
Set.prototype.difference = function(setB){
// this:集合对象A
// setB:集合对象B
// 1、创建一个新的集合
var differenceSet = new Set();
// 2、判断A中的元素是否存在B中,如果不存在则插入到新的集合中。
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (!setB.has(values[i]))
differenceSet.add(values[i]);
}
return differenceSet;
}
五、子集判断。
Set.prototype.subSet = function(setB){
// this:集合对象A
// setB:集合对象B
// 遍历A中的所有元素,判断A中的元素是否都是B中的元素,一旦出现不是,则返回一个false
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (!setB.has(values[i])) return false;
}
return true;
}