版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_JavaScript/article/details/85240090
概念:集合是由一组无序且唯一(每个元素只出现一次)的项组成的一组数据。其与数学里的集合是同一个概念。在ES6里已经引入了集合的数据结构概念——Set类。
分类:常见的有空集,并集,交集,差集。
应用场景:1)数据去重;2)用于存储一些独一无二的数据。
js实现一个集合
集合的特性类似于JavaScript数据类型里的Object,Object对象里的每个键都是唯一。下面用一个名为item的对象表示集合去实现一个简单的集合类。其中集合里的元素是以{value:value}值值对的形式存储的
定义Skipper类,表示集合,其中包含了如下几个操作方法:
class Skipper{
constructor(){
this.item = {}; // 一个集合(值值对,如value : value)
}
/* 查找 */
has(element){
return this.item.hasOwnProperty(element);
}
/* 添加 */
add(element){
if(!this.has(element)){
this.item[element] = element;
return 'success';
}else{
return '该元素已存在';
}
}
/* 删除 */
remove(element){
if(this.has(element)){
delete this.item[element];
return 'success';
}else{
return '该元素不存在';
}
}
/* 清空元素 */
clear(){
this.item = {};
}
/* 查看集合大小 */
size(){
return Object.keys(this.item).length; // 由item对象的键组成的数组的长度
}
/* 提取集合所有元素并组合成的一个数组 */
values(){
let arr = [];
for(let key in this.item){
arr.push(this.item[key]);
}
return arr;
}
}
并集类
给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集,记作A∪B,读作A并B。
class Union{
getSkipper(A,B){
let result = new Skipper();
A.values().forEach(element=>{ // 遍历第一个集合
result.add(element); // add()已去重
});
B.values().forEach(element=>{ // 遍历第二个集合
result.add(element);
});
return result;
}
}
交集类
设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集(intersection),记作A∩B。
class Intersection{
getSkipper(A,B){
let result = new Skipper()
A.values().forEach(element=>{
if(B.has(element)){
result.add(element);
}
});
return result
}
}
补集类
由A中所有不属于B的元素组成的集合,叫做子集B在A中的补集,又称差集。
class Difference{
getSkipper(A,B){
let result = new Skipper();
A.values().forEach(element=>{
if(!B.has(element)){
result.add(element);
}
});
return result;
}
}
(完)