我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 删除元素
Set.prototype.delete = function(value) {
// 判断集合中是否存在该元素
if(!this.has(value)) return false;
// 删除指定元素
delete this.items[value]
// 返回 true,表示删除成功
return true
}
}
我们来使用一下该方法
let set = new Set()
// 添加三个元素,分别为 3 1 6
set.add(3)
set.add(1)
set.add(6)
// 删除元素 6
set.delete(6)
console.log(set.items)
/* 打印结果:
{
‘1’: 1,
‘3’: 3
}
*/
我们可以看到,6
成功被删除了
clear()
方法时用于清空集合中的所有元素的。该方法无需传入参数
实现思路: 直接将 this.items
指向一个空的对象即可
我们看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 清空集合
Set.prototype.clear = function() {
this.items = {}
}
}
来使用一下该方法
let set = new Set()
// 添加三个元素,分别为 3 1 6
set.add(3)
set.add(1)
set.add(6)
// 清空集合
set.clear()
console.log(set.items)
/* 打印结果:
{}
*/
我们可以看到,集合中的所有元素已经被清空了
size()
方法就是返回集合中的元素个数。该方法无需传入参数
这里先介绍一个JS中对象的内置方法:
keys()
方法可以接收一个对象参数,并返回该对象所有的键,存放在一个数组中并返回
实现思路: 通过 keys()
获取包含集合所有键的数组,并返回该数组的 length
即可
我们来看一下代码吧
function Set() {
// 属性
this.items = {}
// 方法
// 判断集合内元素个数
Set.prototype.size = function() {
return Object.keys(this.items).length
}
}
来使用一下该方法
let set = new Set()
console.log(set.size()) // 0,此时集合为空
// 添加三个元素,分别为 3 1 6
set.add(3)
set.add(1)
set.add(6)
console.log(set.size()) // 3,此时集合内有三个元素
values()
方法是用于返回集合中的所有元素。该方法无需传入任何参数
实现思路: 直接将通过方法 keys()
获取到的数组返回即可
我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 返回集合内所有元素
Set.prototype.values = function() {
return Object.keys(this.items)
}
}
我们来使用一下该方法
let set = new Set()
console.log(set.values()) // [],此时集合为空
// 添加三个元素,分别为 3 1 6
set.add(3)
set.add(1)
set.add(6)
console.log(set.values()) // [‘1’, ‘3’, ‘6’],此时集合内有三个元素,分别为 1 、3 、6
union()
方法用于获取当前集合与另一个集合的并集。该方法需要传入一个集合 otherSet
作为参数
实现思路:
-
先创建一个空的新集合
newSet
-
通过
values()
方法获取到包含当前集合的所有元素的数组oldSetValue
,并对其进行遍历,将遍历到每一个元素都添加到newSet()
中去 -
再通过
values()
方法获取到包含otherSet
的所有元素的数组otherSetValue
,并对其进行遍历,将遍历到每一个元素都添加到newSet()
中去 -
返回
newSet
在该实现过程中,我们是通过 add()
方法将两个集合中的所有元素添加到新的集合中的,因为 add()
方法中已经包含了检验元素的重复性部分,所以我们无需担心两个集合的元素是否会重复
我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 获取交集
Set.prototype.union = function(otherSet) {
// 1. 创建新的空集合
let newSet = new Set()
// 2. 获取当前集合的所有元素
let oldSetValue = this.values()
// 2.1 遍历当前集合的元素,并添加到 newSet中
for(let i = 0; i < oldSetValue.length; i++) {
newSet.add(oldSetValue[i])
}
// 3. 获取 otherSet集合的所有元素
let otherSetValue = otherSet.values()
// 3.1 遍历 otherSet集合的元素,并添加到 newSet中
for(let j = 0; j < otherSetValue.length; j++) {
newSet.add(otherSetValue[j])
}
// 4. 返回获取到的交集
return newSet
}
}
我们来使用一下该方法
// 创建集合1
let set1 = new Set()
// 向集合1中添加元素 3 1 6
set1.add(3)
set1.add(1)
set1.add(6)
// 创建集合2
let set2 = new Set()
// 向集合2中添加元素 3 2 8
set2.add(3)
set2.add(2)
set2.add(8)
// 获取集合1和集合2的并集,即集合3
let set3 = set1.union(set2)
// 查看集合3内的所有元素
console.log(set3.values())
/* 打印结果:
[ ‘1’, ‘2’, ‘3’, ‘6’, ‘8’ ]
*/
intersect()
方法是用于获取当前集合与另一个集合的交集。该放需要传入一个集合 otherSet
作为参数
实现思路:
-
先创建一个空的新集合
newSet
-
通过
values()
方法获取到包含当前集合的所有元素的数组oldSetValue
,并对其进行遍历,判断每一个元素是否也存在于otherSet
中,若不存在,则不做任何处理 -
若存在,则将该元素添加到
newSet
中去 -
返回
newSet
我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 获取并集
Set.prototype.intersect = function(otherSet) {
// 1. 创建空的新集合
let newSet = new Set()
// 2. 获取当前集合的所有元素
let oldSetValue = this.values()
// 3. 遍历当前集合的所有元素
for(let i = 0; i < oldSetValue.length; i++) {
let item = oldSetValue[i]
// 3.1 元素同时存在于 otherSet中
if(otherSet.has(item)) {
newSet.add(item)
}
}
// 4. 返回获取到的交集
return newSet
}
}
我们来使用一下该方法
// 创建集合1
let set1 = new Set()
// 向集合1中添加元素 3 1 6
set1.add(3)
set1.add(1)
set1.add(6)
// 创建集合2
let set2 = new Set()
// 向集合2中添加元素 3 2 8
set2.add(3)
set2.add(2)
set2.add(8)
// 获取集合1和集合2的交集,即集合3
let set3 = set1.intersect(set2)
// 查看集合3内的所有元素
console.log(set3.values())
/* 打印结果:
[ ‘3’ ]
*/
difference()
方法是用于获取当前集合与另一个集合的差集。该放需要传入一个集合 otherSet
作为参数
实现思路:
-
先创建一个空的新集合
newSet
-
通过
values()
方法获取到包含当前集合的所有元素的数组oldSetValue
,并对其进行遍历,判断每一个元素是否也存在于otherSet
中,若存在,则不做任何处理 -
若不存在,则将该元素添加到
newSet
中去 -
返回
newSet
我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 获取差集
Set.prototype.difference = function(otherSet) {
// 1. 创建空的新集合
let newSet = new Set()
// 2. 获取当前集合的所有元素
let oldSetValue = this.values()
// 3. 遍历当前集合的所有元素
for(let i = 0; i < oldSetValue.length; i++) {
let item = oldSetValue[i]
// 3.1 otherSset中没有该元素
if(!otherSet.has(item)) {
newSet.add(item)
}
}
// 4. 返回获取到的差集
return newSet
}
}
我们来使用一下该方法
// 创建集合1
let set1 = new Set()
// 向集合1中添加元素 3 1 6
set1.add(3)
set1.add(1)
set1.add(6)
// 创建集合2
let set2 = new Set()
// 向集合2中添加元素 3 2 8
set2.add(3)
set2.add(2)
set2.add(8)
// 获取集合1和集合2的差集,即集合3
let set3 = set1.difference(set2)
// 查看集合3内的所有元素
console.log(set3.values())
/* 打印结果:
[ ‘1’, ‘6’ ]
*/
subset()
方法用于判断当前集合是否为另一个集合的子集。该方法需要传入一个集合 otherSet
作为参数
实现思路:
-
先创建一个空的新集合
newSet
-
通过
values()
方法获取到包含当前集合的所有元素的数组oldSetValue
,并对其进行遍历,判断每一个元素是否也存在于otherSet
中,若不存在,则直接返回false
,表示当前集合不是otherSet
的子集 -
若所有元素遍历完后,该方法仍为返回任何值,此时直接返回
true
,表示当前集合为otherSet
的子集
我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 判断是否为另一个集合的子集
Set.prototype.subset = function(otherSet) {
最后
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
和集合2的差集,即集合3
let set3 = set1.difference(set2)
// 查看集合3内的所有元素
console.log(set3.values())
/* 打印结果:
[ ‘1’, ‘6’ ]
*/
subset()
方法用于判断当前集合是否为另一个集合的子集。该方法需要传入一个集合 otherSet
作为参数
实现思路:
-
先创建一个空的新集合
newSet
-
通过
values()
方法获取到包含当前集合的所有元素的数组oldSetValue
,并对其进行遍历,判断每一个元素是否也存在于otherSet
中,若不存在,则直接返回false
,表示当前集合不是otherSet
的子集 -
若所有元素遍历完后,该方法仍为返回任何值,此时直接返回
true
,表示当前集合为otherSet
的子集
我们来看一下代码
function Set() {
// 属性
this.items = {}
// 方法
// 判断是否为另一个集合的子集
Set.prototype.subset = function(otherSet) {
最后
[外链图片转存中…(img-s7cQXAHX-1720113446498)]
[外链图片转存中…(img-alKA0kTC-1720113446499)]
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容