集合(set) 是一种包含不同元素的数据结构。集合中的元素称为成员。集合的两个最重要特性是:首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。当你想要创建一个数据结构用来保存一些独一无二的元素时就可以用到集合。
常用方法:
- add(data) 追加元素
- has(data) 判断元素是否存在
- remove(element) 删除元素
- clear() 清空集合
- size() 查看集合元素个数
- values() 获取集合中所有的值
- 集合间的操作: 交集 .union() ; 交集 .intersection() ; 差集 .differenceSet() ; 子集 .subSet()
// 封装集合
function Set() {
// 属性
this.items = {};
// 方法
// add方法
Set.prototype.add = function (element) {
// 判断当前集合中是否存在
if (this.has(element)) {
return false
}
// 将元素加入集合
this.items[element] = element;
return true
}
// has 方法
Set.prototype.has = function (element) {
return this.items.hasOwnProperty(element)
}
// remove方法
Set.prototype.remove = function (element) {
// 判断是否存在
if (!this.has(element)) {
return false
}
// 将元素删除
delete this.items[element]
return true
}
// clear方法
Set.prototype.clear = function () {
this.items = {}
}
// size方法
Set.prototype.size = function () {
return Object.keys(this.items).length
}
// 获取集合中所有的值
Set.prototype.values = function () {
return Object.keys(this.items)
}
// 集合间的操作
// 1 并集
Set.prototype.union = function (otherSet) {
// this:集合A
// otherSet:集合对象B
// 1 创建新的集合
var unionSet = new Set();
// 将A中所有的元素添加到新集合中
var values = this.values();
for (var i = 0; i < values.length; i++) {
unionSet.add(values[i])
}
// 取出B集合中的元素,判断是否需要加入到unionSet中
var values = otherSet.values();
for (var i = 0; i < values.length; i++) {
unionSet.add(values[i])
}
return unionSet
}
// 2 交集
Set.prototype.intersection = function (otherSet) {
var intersectionSet = new Set();
// 将A中所有的元素添加到新集合中
var values = this.values();
for (var i = 0; i < values.length; i++) {
var item = values[i];
if (otherSet.has(item)){
intersectionSet.add(item)
}
}
return intersectionSet
}
// 3 差集
Set.prototype.differenceSet = function (otherSet) {
var differenceSet = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
var item = values[i];
if (!otherSet.has(item)){
differenceSet.add(item)
}
}
return differenceSet
}
// 4 子集
Set.prototype.subSet = function (otherSet) {
var values = this.values();
for (var i = 0; i < values.length; i++) {
var item = values[i];
if (otherSet.has(item)){
return false
}
}
return true
}
}
// 测试
var A = new Set();
A.add ('asd');
A.add ('poi');
A.add ('qwe');
var B = new Set()
B.add ('asd');
B.add ('asd');
B.add ('123');
B.add ('999');
console.log(A.differenceSet(B));