面试高频的ES6中的Map和Set数据结构详解

本文详细介绍了ES6中的Map和Set数据结构,包括它们的特点、使用方法及优势。Map允许任意类型的值作为键,解决了对象作为映射时键只能为字符串的问题。Set则确保集合中元素的唯一性。同时,文章提到了WeakMap和WeakSet,它们通过弱引用解决了内存回收问题。Map和Set在数组去重、唯一性维护等场景中有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Map

ES6之前我们需要存储键值对的集合时,只能使用对象作为映射,但对象作为映射的主要缺点是不能使用非字符串值作为键

看看下面例子:

const obj  = { name:'yxz'},
      obj1 = {name:'yzz'}
​
const res = {}
​
res[obj] = 'hello'
res[obj1] = 'hey'
​
res[obj]   // 'hey'
res[obj1]  // 'hey'
复制代码

因为obj和ojb1两个对象字符串化都是[object Object],所以res对象相当于设置了一个key,而后面的赋值把前面的覆盖掉了。

而ES6新增了一个数据结构map(...),它的key和传统对象的key的区别是:map(...)的key可以是任意类型的,而传统对象的key只能是字符串类型。

用法

const obj = {
   name:'刘德华'
}
​
const obj1 ={
   name:'黎明'
}
​
const m = new Map()
​
// 设置一对值
m.set(obj,'ldh')
m.set(obj1,'lm')
​
// 读取值
m.get(obj)  // 'ldh'
m.get(obj1) // 'lm'
复制代码

注意这里不能像对象那样使用 [] 来获取key的值,但同等可以使用get(...) 方法来获取。

从map中删除一个元素

需要从map中删除一个元素,不能像对象那样使用delete操作符,取而代之的是delete(...)方法。

const x = {
  name:'张学友'
}
​
const y = {
  name:'周星驰'
}
​
const m = new Map()
​
// 设置一对值
m.set(x,'zxy')
m.set(y,'zxc')
// 集合里元素个数
m.size. // 2
// 删除一个元素
m.delete(x)   
// 集合里元素个数
m.size  // 1
复制代码

清空map中的所有元素

const x = {
  name:'张学友'
}
​
const y = {
  name:'周星驰'
}
​
const m = new Map()
​
// 设置一对值
m.set(x,'zxy')
m.set(y,'zxc')
​
m.size.  // 2
m.clear()
m.size.  // 0
复制代码

map(...)构造器也可以接受一个iterable,这个迭代器必须产生一列数组,每个数组的第一个元素是键(key),而第二个元素是值(v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值