今天我们来简单的写一下Set与Map的底层代码
经过上一篇文章大家也或多或少对Set与Map数据类型有了一定的认知,那么废话不多说,开整。
Set
今天我们要写的Set功能有
1.size(返回Set实例的成员总数)
2.has(返回一个布尔值,表示该值是否为Set的成员)
3.delete(删除某个值,返回一个布尔值,表示删除是否成功)
4.clear(清空整个Set)
5.add(添加某个值,返回 Set 结构本身)
class Seter {
constructor(aggregate = []) {
if (typeof aggregate[Symbol.iterator] !== "function") {
throw new TypeError(`${aggregate}不是一个可遍历的值`)
}
this.arr = []
for (const data of aggregate) {
this.add(data)
}
}
}
上面我们实现了初始化的一些操作,下面我们来写方法
size(){
return this.arr.length
}
add(parameter) {
if (!this.has(parameter)) {
this.arr.push(parameter)
return true
}else{
return false
}
}
has(testing) {
let preservation=false
for (const item of this.arr) {
if (item === 0 && testing === 0) {
return true
}
let receive=Object.is(item,testing)
preservation=receive
if(preservation==true){
return preservation
}
}
return preservation
}
上面实现了size,has,add这三个方法,接下来我们再来实现下面的clear与delete方法
delete(del) {
if (this.has(del)) {
for (let i = 0; i < this.arr.length; i++) {
if (this.arr[i] === 0 && del === 0) {
this.arr.splice(i, 1)
return true
} else if (Object.is(del, this.arr[i])) {
this.arr.splice(i, 1)
return true
}
}
} else {
return false
}
}
clear(){
this.arr.length=0
return true
}
Map
我们要实现的功能
1.set
2.get
3.size
4.delete
5.has
6.clear
因为Map与Set很相似,那么我就直接使用部分Set的代码(偷偷懒)
初始化完成,为了便捷我使用两个辅助方法
部分效果展示
这个Map我就不将我的代码放出来了,大家也自己敲一下吧,两者还是很相似的,希望对你们有所帮助
版权声明:本文为weixin_51116095原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。