javascript 实现集合及一系列的操作
程序员文章站
2022-03-29 08:34:00
...
javascript 实现集合及一系列的操作
//封装Set类
function Set() {
this.items = {}
//1、add() 方法
Set.prototype.add = function (value) {
if (this.has(value)) { //如果存在就不能添加
return false
}
this.items[value] = value //不存在就添加到集合中
return true
}
//2、has()方法 判断是否存在集合中
Set.prototype.has = function (value) {
return this.items.hasOwnProperty(value)
}
//3、remove() 方法
Set.prototype.remove = function (value) {
//判断元素是否存在集合中
if (!this.has(value)) {
return false
}
//删除元素
delete this.items[value]
return true
}
//4、cleat()方法 清空集合
Set.prototype.clear = function () {
this.items = {}
}
//5、size()方法
Set.prototype.size = function () {
return Object.keys(this.items).length
}
//获取集合中所有的值
Set.prototype.values = function () {
return Object.keys(this.items)
}
//并集操作
Set.prototype.union = function (otherSet) {
let unionSet = new Set()
let values = this.values()
for (let i = 0 ;i < values.length; i++) {
unionSet.add(values[i])
}
let otherValues = otherSet.values()
for (let i = 0 ;i < otherValues.length; i++) {
unionSet.add(otherValues[i])
}
return unionSet
}
//交集
Set.prototype.intersection = function (otherSet) {
let intersectionSet = new Set()
let values = otherSet.values()
for (let i = 0 ; i < values.length ; i++) {
if (this.has(values[i])) {
intersectionSet.add(values[i])
}
}
return intersectionSet
}
//差集
Set.prototype.difference = function (otherSet) {
let differenceSet = new Set()
let values = this.values()
for (let i = 0 ; i < values.length ; i++) {
if (!otherSet.has(values[i])) {
differenceSet.add(values[i])
}
}
return differenceSet
}
//子集 是否为该集合的子集
Set.prototype.subset = function (otherSet) {
let values = otherSet.values()
for (let i = 0 ; i < values.length ; i++) {
if (!this.has(values[i])) {
return false
}
}
return true
}
}
测试代码:
const set = new Set()
console.log(set.add('aa'));
console.log(set.add('aa'));
console.log(set.add('bb'));
console.log(set.add('cc'));
console.log(set.add('ee'));
console.log(set.has('aa'))
console.log(set.remove('aa'))
console.log(set.values())
console.log(set.size())
set.clear()
console.log(set.values())
const setA = new Set()
setA.add('a')
setA.add('b')
setA.add('e')
setA.add('c')
setA.add('d')
const setB = new Set()
// setB.add('f')
// setB.add('g')
// setB.add('h')
setB.add('c')
setB.add('d')
console.log(setA.union(setB));
console.log(setA.intersection(setB));
console.log(setA.difference(setB))
console.log(setA.subset(setB))
结果:
true
false
true
true
true
true
true
[ 'bb', 'cc', 'ee' ]
3
[]
Set { items: { a: 'a', b: 'b', e: 'e', c: 'c', d: 'd' } }
Set { items: { c: 'c', d: 'd' } }
Set { items: { a: 'a', b: 'b', e: 'e' } }
true
上一篇: 面试中的一系列问题总结
推荐阅读
-
js封装的textarea操作方法集合(兼容很好)_javascript技巧
-
js实现点小图看大图效果的思路及示例代码_javascript技巧
-
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性_javascript技巧
-
C# 实现对PPT文档加密、解密及重置密码的操作方法
-
C#实现一个简单实用的TXT文本操作及日志框架详解
-
C#操作IIS程序池及站点的创建配置实现代码
-
C# 实现对PPT文档加密、解密及重置密码的操作方法
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
C#实现一个简单实用的TXT文本操作及日志框架详解
-
C#操作IIS程序池及站点的创建配置实现代码