ES6之深入Set 与 WeakSet的知识讲解
程序员文章站
2022-03-20 22:00:17
...
-
Set的概念:
Set是ES6 提供的新的数据结构。它类似于数组,只有属性值,并且成员的值都是唯一的,没有重复的值。 -
WeakSet的概念:
WeakSet 结构与 Set 类似,weakSet的成员值是唯一的,并且 WeakSet 的成员只能是对象,而不能是其他类型的值 -
传递参数的讲究:
Set、WeakSet传递的参数必须具备迭代接口,比如:数组,字符串,arguments等,
迭代接口就是指在原型上有:Symbol(Symbol.iterator) -
Set实例化是长什么样的?
-
WeakSet实例化是长什么样的?
-
Set 与 WeakSet 之间的区别?
WeakSet和 Set 对象的区别有两点:
1.与Set相比,WeakSet 只能是对象的集合,而不能是任何类型的任意值。
2.WeakSet持弱引用:集合中对象的引用为弱引用。 如果没有其他的对 WeakSet中对象的引用,那么这些对象会被当成垃圾回收掉。 这也意味着WeakSet中没有存储当前对象的列表。 正因为这样,WeakSet 是不可枚举的。 -
Set的应用(数组去重,数组的交差并集):
let o = {
name: 'cst'
}
let arr = [11, o, 11, 12, 33, o, 33, 44, 55, 44, {name: 'hfq'}];
// 用Set来实现去重
let os = new Set(arr);
let newArr = [...os];
console.log(newArr);
let arr1 = [1, 2, 3, 4, 5, 3];
let arr2 = [1, 3, 4, 6, 7, 8];
// 交集
let osj1 = new Set(arr1);
let osj2 = new Set(arr2);
let newarrj = [...osj1].filter(ele => osj2.has(ele));
console.log(newarrj);
// 并集
let osbing = new Set([...arr1, ...arr2]);
console.log([...osbing]);
// 差集
let oscj1 = new Set(arr1);
let oscj2 = new Set(arr2);
let newarrc1 = [...oscj1].filter(ele => !oscj2.has(ele));
console.log(newarrc1);
let newarrc2 = [...oscj2].filter(ele => !oscj1.has(ele));
console.log(newarrc2);
下篇文章将更新Map 与 WeakMap 的知识,欢迎关注。
如有知识疏漏的地方,请指出,谢谢!
上一篇: Vue兼容IE报错解决方案