js封装集合(包括集合之间的操作)
集合是由一组无序的、但不能重复的元素构成的。 我们可以把集合看成一个特殊的数组,特殊之处在于里面的元素,没有顺序,也不能重复。
代码实现
function Set1() {
//定义属性
this.items = {}
//判断集合里是否存在指定元素has()
Set1.prototype.has = function(value) {
return this.items.hasOwnProperty(value)
}
//往集合添加元素add()
Set1.prototype.add = function(value) {
if (this.has(value)) return false
this.items[value] = value
return true
}
//删除指定元素remove()
Set1.prototype.remove = function(value) {
if (!this.has(value)) return false
delete this.items[value]
return true
}
//获取集合元素个数size()
Set1.prototype.size = function() {
return Object.keys(this.items).length
}
//清空集合clear()
Set1.prototype.clear = function() {
this.items = {}
}
//获取集合元素getValue()
Set1.prototype.getValue = function() {
return Object.values(this.items)
}
//集合之间的操作
//求并集union()
Set1.prototype.union = function(otherSet) {
//1.创建新集合
var unionSet = new Set1()
//2.取出集合A的元素放入新集合中
var values = this.getValue()
for (let i = 0; i < values.length; i++) {
unionSet.add(values[i])
}
//3.取出集合B里的元素,也放入新集合
values = otherSet.getValue()
for (let i = 0; i < values.length; i++) {
//这里不用担心放入重复元素,add()方法已经判断过了
unionSet.add(values[i])
}
return unionSet
}
//求交集
Set1.prototype.intersection = function(otherSet) {
//1.创建新集合
var intersectionSet = new Set1()
//2.取出集合A元素
var values = this.getValue()
for (let i = 0; i < values.length; i++) {
//3.判断集合B里是否有这个元素
if (otherSet.has(values[i])) {
//有就放入新集合
intersectionSet.add(values[i])
}
}
return intersectionSet
}
//求差集
Set1.prototype.different = function(otherSet) {
var differentSet = new Set1()
var values = this.getValue()
for (let i = 0; i < values.length; i++) {
if (!otherSet.has(values[i])) {
differentSet.add(values[i])
}
}
return differentSet
}
//求子集
Set1.prototype.subset = function(otherSet) {
var values = this.getValue()
for (let i = 0; i < values.length; i++) {
if (!otherSet.has(values[i])) {
return false
}
}
return true
}
}
测试代码
var setA = new Set1()
setA.add('aa')
setA.add('bb')
setA.add('cc')
setA.remove('aa')
console.log(setA.has('aa'));
console.log(setA.size());
console.log(setA.getValue());
输出:
var setB = new Set1()
setB.add('11')
setB.add('22')
setB.add('33')
setB.add('cc')
var unionSet = setA.union(setB)
console.log(unionSet.getValue());
var intersectionSet = setA.intersection(setB)
console.log(intersectionSet.getValue());
var differentSet = setA.different(setB)
console.log(differentSet.getValue());
输出: