【Es6入门实践】09Set和WeakSet,Map数据结构

01 Set

let setArr=new Set(["牛奶","可乐","绿茶","冰红茶"])
console.log(setArr)

在这里插入图片描述
打印出来的结果不是数组,而是set的数据类型

接下来我们对这个数组进行增删改

增:add

注意:数组增加是使用push,但是我们这里是使用add

let setArr=new Set(["牛奶","可乐","绿茶","冰红茶"])

setArr.add('矿泉水')
console.log(setArr)

在这里插入图片描述
如果增加的是数据里面有的,那么增加是不管用的

let setArr=new Set(["牛奶","可乐","绿茶","冰红茶"])

setArr.add('牛奶')
console.log(setArr)

在这里插入图片描述
增加不管用,那么声明呢?

let setArr=new Set(["牛奶","可乐","绿茶","牛奶"])

console.log(setArr)

在这里插入图片描述
我们发现声明一个一样的也是没有用的
所以数据里面是不允许重复的,也就是一个去重的过程,这是它最大的特点

查:has

它返回的是true或者false

let setArr=new Set(["牛奶","可乐","绿茶","咖啡"])

console.log(setArr)
console.log(setArr.has('咖啡'))
console.log(setArr.has('红茶'))

在这里插入图片描述

删:clear

扫描二维码关注公众号,回复: 9955275 查看本文章
let setArr=new Set(["牛奶","可乐","绿茶","咖啡"])

console.log(setArr)
setArr.clear()
console.log(setArr)

在这里插入图片描述
可以看见数据已经被全部删除了,但是我们要是不想全部删除,而只是想删除某一个,该怎么操作呢?

  • 用delete
let setArr=new Set(["牛奶","可乐","绿茶","咖啡"])

console.log(setArr)
setArr.delete('可乐')
console.log(setArr)

在这里插入图片描述
写完增删查,我们来看看怎么循环输出

  • 方法1:for of
let setArr=new Set(["牛奶","可乐","绿茶","咖啡"])

for(let item of setArr){
  console.log(item)
}

在这里插入图片描述
方法2:forEach

setArr.forEach((value)=>console.log(value))

如果我们想要知道元素里面有多少个数据,不用length,用size

console.log(setArr.size)

缺点:只能放数组,那对象怎么办呢?

用let weakObj =new WeakSet()

02 WeakSet

WeakSet里面是不能直接放对象的

下面这种是错误演示

let weakObj =new WeakSet({a:'HLS'})

在这里插入图片描述
正确的做法是需要添加add,WeakSet有点类似于懒加载

let weakObj =new WeakSet()
let obj={a:'HLS',b:'jack'}
weakObj.add(obj)
console.log(weakObj)

在这里插入图片描述
必须这个obj是声明好的

踩坑:内存空间一样,也是可以打印出来的

let weakObj =new WeakSet()
let obj={a:'HLS',b:'jack'}
let obj1={a:'HLS',b:'jack'}
weakObj.add(obj)
weakObj.add(obj1)
console.log(weakObj)

在这里插入图片描述
如果内存空间相同,则显示一个

let weakObj =new WeakSet()
let obj={a:'HLS',b:'jack'}
let obj1=obj
weakObj.add(obj)
weakObj.add(obj1)
console.log(weakObj)

在这里插入图片描述

03 Map

Map数据类型,用得更广泛

以前我们是这样写的:

let json={
  name:'HLS',
  skill:'web'
}
console.log(json.name)

json.name这种需要全部遍历的,效率比数组慢的多,而且灵活性不好

我们尝试使用map数据结构

let json={
  name:'HLS',
  skill:'web'
}
var map =new Map();
map.set(json,'cola')
console.log(map)

在这里插入图片描述
我们可以很清晰地看见keyvalue的值

let json={
  name:'HLS',
  skill:'web'
}
var map =new Map();
map.set(json,'cola')
console.log(map)
//对象和字符串互换一下
map.set('HLS',json);
console.log(map)

浏览器显示结果
在这里插入图片描述
map增删查

查:get()

// get
console.log(map.get(json))

在这里插入图片描述

// get
console.log(map.get('HLS'))

在这里插入图片描述

  • 删除特定的值:delete
map.delete(json)
console.log(map)

在这里插入图片描述

  • 删除全部的值
map.clear()
console.log(map)

在这里插入图片描述

我们要知道有多少个值,那就用size(size是属性)

console.log(map.size)

查:has 会返回true和false

console.log(map.has('HLS'))
发布了227 篇原创文章 · 获赞 41 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42554191/article/details/104503515