# 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不可以遍历!
- 01.let-const
- 02.对象数组解构&赋值
- 03.字符串扩展,数值扩展,数组扩展
- 04.数组扩展
- 05.对象扩展
- 06.06.Symbol原始数据类型
- 07.set数据结构
- 08.map数据结构
- 09.proxy与Reflect
- 10.类
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module与模块化
- 15.es6学习总结
- 记录- Vue拖拽实例
- 记录-git使用天坑之分支切换
- node -- session & cookie & localStorge
- 18.12关于前端战略技术储备与问题反馈
- Vue组件通信方式总结以及遇到的问题
- 01.版本回溯以及文件修改
- 02.远端控制
- 03.分支管理
- node 入门 留言板
- nodejs模块与 commonjs 规范
- 19年技术发展规划
- JS错误处理 -> 提升程序健壮性
- Git 基本使用
- 18年年终总结