1.集合结构
- 集合比较常见的实现方式是 哈希表(后续讲解到),我们这里来实现一个封装的集合类。
- 集合通常是由一组无序的,不能重复的元素构成
2.特殊的数组
-
特殊之处在于里面的元素没有顺序,也不能重复。
-
没有顺序意外这不能通过下标来进行访问,不能重复意味着相同的对象再集合中只能存在一份。
-
因为ES6里面已经实现了Set类
-
我们为了明确集合的内部实现方式,这里自己封装一下Set类。
3.封装集合类
//封装集合类
function Set(){
//封装属性 因为数组允许元素重复,所以我们使用Object对象
this.items = {},
//封装方法
}
4.封装集合的方法
- add(value): 向集合添加一个新的项
//add
Set.prototype.add = function(value){
//判断当前集合中是否已经包含了这个元素
if(this.has(value)){
return false
}
//将元素添加进集合
this.items[value] = value;
return true;
}
- remove(value): 移除一个元素
//Set
Set.prototype.has = function(value){
return this.items.hasOwnProperty(value);
}
- has(value): 判断有没有某个元素
//remove
Set.prototype.remove = function(value){
//判断当前集合中是否已经包含了这个元素
if(!this.has(value)){
return false
}
//删除元素
delete this.items[value];
return true;
}
- clear():清空集合
//clear
Set.prototype.clear = function(){
// 重新赋值一个新对象
this.items = {};
return true;
}
- size(): 返回集合的元素数量
//size
Set.prototype.size = function(){
return Object.keys(this.items).length;
}
- values() : 返回一个包含集合中所有元素的数组
//values
Set.prototype.values = function(){
return Object.keys(this.items);
}
5.集合的完整代码实现
//封装集合类
function Set(){
//封装属性 因为数组允许元素重复,所以我们使用Object对象
this.items = {},
//封装方法
//add
Set.prototype.add = function(value){
//判断当前集合中是否已经包含了这个元素
if(this.has(value)){
return false
}
//将元素添加进集合
this.items[value] = value;
return true;
}
//Set
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 = {};
return true;
}
//size
Set.prototype.size = function(){
return Object.keys(this.items).length;
}
//获取所有值
Set.prototype.values = function(){
return Object.keys(this.items);
}
}
var set = new Set();