4字典
字典是一种以键值对(key-value)存储数据的数据结构。这个数据结构在js中非常普遍,比如js中的对象就是这个数据结构,写过js的人应该对字典非常熟悉。
原书是用数组构建字典的,现在已经8012年了,再用数据一把梭就很low了,这里我们使用Map来构造字典这个数据结构。
4.1 字典的方法和属性
字典的方法和属性 | 含义 |
---|---|
size(属性) | 字典的大小 |
set(方法) | 向字典中添加数据 |
get(方法) | 在字典中查找数据 |
has(方法) | 判断字典中是否有某个数据 |
delete(方法) | 删除字典中的数据 |
clear(方法) | 清空字典 |
4.2 字典的程序实现
其实es2015中,字典(map)已经默认存在了,没有必要再重新实现一遍。我在这里直接讲解下map吧。
4.2.1 map和对象的区别
在js中map和对象是非常像的,都是采用键值对的数据结构。它们不同点是它们的key值。对象的key值只允许是字符串,而map的key值可以是字符串、数字、对象等各种类型。
1 | let m = new Map() |
使用对象存储数据的时候,对象会默认把key值转成字符串,key和key2转成字符串都是[object Object],所以obj[key]和obj[key2]获取的值是相同的都是b。而map是直接使用对象当做键值的,所以mapget(key)和map.get(key2)获取的是a和b
4.2.3 map中的属性和方法
size属性
size属性返回Map结构的成员总数
1 | let m = new Map() |
set(key,value)
set方法设置键名key对应的键值为value,然后返回整个map结构,如果key值已经存在,则键值会更新
1 | let m = new Map() |
get(key)
获取key对应的键值,如果key不存在,则返回undefined
1 | let m = new Map() |
has(key)
has方法返回一个布尔值,表示某个键是否在map对象中
1 | let m = new Map() |
delete(key)
delete方法删除某个键,如果删除成功则返回true,否则返回false
1 | let m = new Map() |
clear()
clear方法清空所有的成员,没有返回值
1 | let m = new Map() |
4.3 对map的遍历
- keys() 返回键名遍历器
- values() 返回键值遍历器
- entries() 返回所有成员的遍历器
- forEach() 遍历map的所有成员
1 | let map = new Map() |
原书是使用数组模拟字典的,可能是因为写该书的时候,es2015还没出现。es2015中的Map对象就是字典,而且具有良好的api,以后写代码可以省去省去很多麻烦。
v1.5.2