一、set对象允许存储任何类型的唯一值,无论是原始值或者是对象引用;
1、数组去重 arr=[1,2,3,1,2,4]
const obj=new Set(arr) 得到一个新的对象 {1,2,3,4}
将对象转换为数组:[...obj] 或者[...new Set(arr)]
2、也可以对字符串进行去重
值得注意的是,NaN被Set认为是相同的,{}被认为是不同的
const obj=new Set([{},{}]) // 结果 obj是{{},{}} obj.size是2
const obj =new Set([NaN,NaN]) //结果 obj 是{NaN} obj.size 是1
所以Set 无法对对象去重
3、Set的一些方法
let mySet=new Set()
mySet.add(value)、mySet.has(value)、mySet.clear();mySet.delete(value);
参数value是必须,要增加,删除、是否含有的元素的值 clear()是清空所有的对象
4、Set的一些用法
let arr1 = [1,2,3,4,5];
let arr2 = [4,5,6,7,8];
let a = new Set(arr1);
let b= new Set(arr2)
数组去重&并集
new Set([...arr1,...arr2]) //{1,2,3,4,5,6,7,8}
let arr3 = [...new Set([...arr1,...arr2])] //[1,2,3,4,5,6,7,8]
数组交集
let arr3 = new Set(arr1.filter(x=>b.has(x))) //{4,5}
数组差集
let arr3 = new Set(arr1.filter(x=>!b.has(x))) //{1,2,3}
let arr4 = new Set(arr2.filter(x=>!a.has(x))) //{6,7,8}
[...arr3,...arr4] //[1,2,3,6,7,8]
5、遍历
在ES6中JavaScript 已经拥有了数组、对象、Map集合和Set集合这样四种数据结构。为了统一和简化遍历这四种数据结构的操作,ES6引入了遍历器机制。
1、keys()方法:默认遍历器,其值为集合中的所有键名。
2、values()方法:默认遍历器,其值为集合中的所有值。
3、entries()方法:默认遍历器,其值为所有成员的键值对。
所以Set也有遍历器的方法
let mySet=new Set()
mySet.keys() : 返回键名的遍历器
mySet.values():返回键值的遍历器
mySet.entries(): 返回键值对的遍历器
mySet.forEach() :回调函数遍历
二、Map是ES6新增的一种数据结构,Map类似于对象,原本对象的key必须是字符串或者数字,而Map的key可以是任意类型
Map的用法与普通对象差不多,也要实例化一下( new Map() )
1、Map的属性和方法
size:获取成员的数量
set:设置成员 key 和 value
get:获取成员属性值
has:判断成员是否存在
delete:删除成员
clear:清空所有
2、Map的遍历方法
Map 实例的遍历方法有:
- keys():返回键名的遍历器。
- values():返回键值的遍历器。
- entries():返回所有成员的遍历器。
- forEach():遍历 Map 的所有成员。