Set
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
作用:去重
算法:
Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。
这表明,在 Set 内部,两个NaN是相等,两个对象总是不相等的。
// set是一种新的数据结构 Array.from可以转化成数组
去重代码:
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
应用扩展符:
let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)];
set不能同步改变原来的 Set 结构,目前没有直接的方法,但有两种变通方法。一种是利用原 Set 结构映射出一个新的结构,然后赋值给原来的 Set 结构;另一种是利用Array.from方法。 都是利用数组来做改变和转换的
WeakSet
作用:去重
算法:
1.WeakSet 的成员只能是对象
2.WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用 而垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakSet 不可遍历。
ps:不知道这个具体要用来做什么 只是说 做一些对象以外的事情
map
作用:值—值的hash数据结构
算法:
ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。