Set和Map是ES6中非常重要的两个数据结构,本节详细介绍Set和Map的用法。
Map对象用于保存键-值对。任何值(对象或者原始值)都可以作为一个键或一个值。
Map的key是字符串,如代码示例2-110所示。
代码示例2-110
Map的key可以设置为对象,如代码示例2-111所示。
代码示例2-111
Map的key可以设置为函数,如代码示例2-112所示。
代码示例2-112
key也可以是NaN,如代码示例2-113所示。
代码示例2-113
虽然NaN和任何值,甚至和自己都不相等(NaN!==NaN返回值为true),但是NaN作为Map的键来讲是没有区别的。
对Map进行遍历,下面介绍两种遍历Map的方法。
(1)for…of遍历,如代码示例2-114所示。
代码示例2-114 for…of遍历
(2)forEach()遍历,如代码示例2-115所示。
代码示例2-115 forEach遍历
Map与Array的转换,如代码示例2-116所示。
代码示例2-116
Map的克隆,如代码示例2-117所示。
代码示例2-117
Map的合并,如代码示例2-118所示。
代码示例2-118
Set是ES6提供的一种新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。
Set对象的特点如下:
(1)Set对象允许存储任何类型的唯一值,无论是原始值还是对象引用。
(2)Set中的元素只会出现一次,即Set中的元素是唯一的。
(3)NaN和undefined都可以被存储在Set中,NaN之间被视为相同的值(尽管NaN!==NaN)。
(4)Set()函数可以接收一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化。
Set对象的用法,如代码示例2-119所示。
代码示例2-119
Set类型可以和其他类型进行转换,如代码示例2-120所示。
代码示例2-120
利用Set中的元素的唯一性实现数组去重,如代码示例2-121所示。
代码示例2-121
通过Set进行交集、并集、差集计算,如代码示例2-122所示。
代码示例2-122