4、Map和Set

JavaScript的默认对象表示方式{}可以视为其他语言中的MapDictionary的数据结构,即一组键值对。

但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型Map

Map

初始化Map需要一个二维数组,或者直接初始化一个空Map

var map = new Map([['tom',18],['lucy',22],['lily',17]])

常用api

var map = new Map([['tom',18],['lucy',22],['lily',17]])

//获取map的长度
map.size
//设置一个key-value,如果已经存在会覆盖value
map.set('james',25)
//判断是否存在一个key
map.has('lucy')
//根据key获取value
map.get('lucy')
//根据key删除
map.delete('tom')
//清空map
map.clear()

Set

SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var set = new Set(['lucy','tom','james'])

常用api

var set = new Set(['lucy','tom','james'])

//获取set的长度
set.size
//添加一个元素
set.add('lily')
//删除一个元素
set.delete('tom')
//清空
set.clear()
//判断是否存在元素
set.has('james')

iterable

遍历Array可以采用下标循环,遍历MapSet就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,ArrayMapSet都属于iterable类型。

具有iterable类型的集合可以通过新的for ... of循环来遍历,for ... of循环是ES6引入的新的语法

var set = new Set(['lucy','tom','james'])

for(name of set){
    console.log(name)
}