🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# set数据结构 ------ > Set本身是一个构造函数,用来生成Set数据结构(类数组)。成员的值都是唯一的,没有重复的值。 > add(value): 添加某个值,返回Set结构本身。 delete(value):删除某个值,返回一个布尔值,标识删除是否成功 has(value): 返回一个布尔值,表示该值是否为Set成员。 clear(): 清除所有成员,没有返回值。 ```javascript /* 1. 向set内部添加的值是不会被修改类型,且对比类型不同,不会被剔除 2. set内部 两个NaN相等的, 两个对象是不相等的,字符串类型和number类型是不相等的 */ //1.基本使用方法 let set = new Set() set.add(1) set.add(2) console.log(set); // 1,2 set.delete(1) console.log(set); //2 set.has(1) //false set.has(2) // true let arr = [1,2,3,4] arr.forEach(x => set.add(x)) console.log(set); //2,1,3,4 set.clear() console.log(set); // //2.去重 let arr = [1,2,3,4,5,4,3,2,1,'1','2'] let newarr = [...new Set(arr)] /*...扩展运算符会把set转换为数组 */ Array.from(new Set(arr)) // 通过Array.from去重 //3. Array.from(new Set([1,23,4,5,6])) set类型转为数组类型 Array.from(new Set([1,23,4,5,6])) // [1,23,4,5,6] //4. set数据结构遍历 /* 1.keys(),values(),entries() 2.forEach() */ let setArr = new Set([1,2,3,3,4,5]) setArr.keys() setArr.values() /* 在set数据结构中,key和value是i一样的,所以这两个方法得到的也是一样的 下面entries得到的键值对仍然一样 */ setArr.entries() //5. set扩展 let set = new Set([1, 2, 3]); set = new Set([...set].map(x => x * 2)); // 返回Set结构:{2, 4, 6} let set = new Set([1, 2, 3, 4, 5]); set = new Set([...set].filter(x => (x % 2) == 0)); // 返回Set结构:{2, 4} ``` > WeakSet() 与set有三处不同: 1).WeakSet 的成员只能是对象,而不能是其他类型的值。 2).WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中 3).WeakSet不可以遍历!