字典是一种以键值对(key-value)存储数据的数据结构。这个数据结构在js中很是广泛,好比js中的对象就是这个数据结构,写过js的人应该对字典很是熟悉。javascript
原书是用数组构建字典的,如今已经8012年了,再用数据一把梭就很low了,这里咱们使用Map来构造字典这个数据结构。java
字典的方法和属性 | 含义 |
---|---|
size(属性) | 字典的大小 |
set(方法) | 向字典中添加数据 |
get(方法) | 在字典中查找数据 |
has(方法) | 判断字典中是否有某个数据 |
delete(方法) | 删除字典中的数据 |
clear(方法) | 清空字典 |
其实es2015中,字典(map)已经默认存在了,没有必要再从新实现一遍。我在这里直接讲解下map吧。api
在js中map和对象是很是像的,都是采用键值对的数据结构。它们不一样点是它们的key值。对象的key值只容许是字符串,而map的key值能够是字符串、数字、对象等各类类型。数组
let m = new Map()
const key = {}
const key2 = {}
m.set(key, 'a')
m.set(key2, 'b')
console.log(m.get(key)) // a
console.log(m.get(key2)) // b
let obj = {}
obj[key] = 'a'
obj[key2] = 'b'
console.log(obj[key]) // b
console.log(obj[key2]) // b
复制代码
使用对象存储数据的时候,对象会默认把key值转成字符串,key和key2转成字符串都是[object Object],因此obj[key]和obj[key2]获取的值是相同的都是b。而map是直接使用对象当作键值的,因此mapget(key)和map.get(key2)获取的是a和b数据结构
size属性返回Map结构的成员总数ui
let m = new Map()
m.set('a', 'a1')
m.set('b', 'b1')
console.log(m.size) // 2
复制代码
set方法设置键名key对应的键值为value,而后返回整个map结构,若是key值已经存在,则键值会更新spa
let m = new Map()
m.set('a', 'a1')
m.set('a', 'b1')
console.log(m) // Map(1) {"a" => "b1"}
复制代码
获取key对应的键值,若是key不存在,则返回undefinedcode
let m = new Map()
m.set('a', 'a1')
console.log(m.get('b')) // undefined
复制代码
has方法返回一个布尔值,表示某个键是否在map对象中对象
let m = new Map()
m.set('a', 'a1')
console.log(m.has('b')) // false
复制代码
delete方法删除某个键,若是删除成功则返回true,不然返回falseip
let m = new Map()
m.set('a', 'a1')
m.set('b', 'b1')
console.log(m.delete('b')) // true
console.log(m.delete('c')) // false
复制代码
clear方法清空全部的成员,没有返回值
let m = new Map()
m.set('a', 'a1')
m.set('b', 'b1')
console.log(m) // Map(2) {"a" => "a1", "b" => "b1"}
m.clear()
console.log(m) // Map(0) {}
复制代码
let map = new Map()
map.set('a', 'a1')
map.set('b', 'b1')
for (let key of map.keys()) {
console.log(key)
}
// a
// b
for (let value of map.values()) {
console.log(value)
}
// a1
// b1
for (let [key, value] of map.entries()) {
console.log(key, value)
}
// a a1
// b b1
map.forEach((value, key) => {
console.log(value, key)
})
// a1 a
// b1 b
复制代码
原书是使用数组模拟字典的,多是由于写该书的时候,es2015还没出现。es2015中的Map对象就是字典,并且具备良好的api,之后写代码能够省去省去不少麻烦。