# 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年年終總結