【ES6(2015)】Set
文章目錄
- 1. 基本語法
- 2. 遍歷方式
- 3. WeakSet
在 JavaScript 里通常使用Array或Object來存儲(chǔ)數(shù)據(jù)。 在 ES6 中,新增了數(shù)據(jù)結(jié)構(gòu) Set 和 Map,它們分別對(duì)應(yīng)傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)的“集合”和“字典”。首先,我們先來學(xué)習(xí)下 Set 數(shù)據(jù)結(jié)構(gòu)。
ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。
1. 基本語法
// 生成Set實(shí)例,可初始化為空 let s = new Set() // 初始化的參數(shù)必須是可遍歷的,可以是數(shù)組或者自定義遍歷的數(shù)據(jù)結(jié)構(gòu)。 let s = new Set([1, 2, 3, 4])添加數(shù)據(jù)
s.add('hello') s.add('goodbye') // 也支持鏈?zhǔn)綄懛?/span> s.add("hello").add('world')Set 數(shù)據(jù)結(jié)構(gòu)不允許數(shù)據(jù)重復(fù),所以添加重復(fù)的數(shù)據(jù)是無效的(可以用來去重)
刪除數(shù)據(jù)
// 刪除指定數(shù)據(jù) s.delete('hello') // true // 刪除全部數(shù)據(jù) s.clear()統(tǒng)計(jì)數(shù)據(jù)
// 判斷是否包含數(shù)據(jù)項(xiàng),返回 true 或 false s.has('hello') // true // 計(jì)算數(shù)據(jù)項(xiàng)總數(shù) s.size // 2數(shù)組去重
let arr = [1,2, 2, 3, 4, 2, 3, 1] let s = new Set(arr) console.log(s) // Set(4) {1, 2, 3, 4}// 合并去重 let arr1 = [1, 2, 3, 4] let arr2 = [2, 3, 4, 5, 6] let s = new Set([...arr1, ...arr2]) console.log([...s]) // [1, 2, 3, 4, 5, 6] console.log(Array.from(s)) // [1, 2, 3, 4, 5, 6]交集
let s1 = new Set(arr1) let s2 = new Set(arr2) let result = new Set(arr1.filter(item => s2.has(item))) console.log(Array.from(result))差集
let arr3 = new Set(arr1.filter(item => !s2.has(item))) let arr4 = new Set(arr2.filter(item => !s1.has(item))) console.log(arr3) console.log(arr4) console.log([...arr3, ...arr4])2. 遍歷方式
- keys():返回鍵名的遍歷器
- values():返回鍵值的遍歷器
- entries():返回鍵值對(duì)的遍歷器
- forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員
- for...of:直接遍歷每個(gè)成員
3. WeakSet
WeakSet 結(jié)構(gòu)與 Set 類似,也是不重復(fù)的值的集合。但是,它與 Set 有兩個(gè)區(qū)別。
- WeakSet 的成員只能是對(duì)象,而不能是其他類型的值;
- WeakSet 沒有size屬性,沒有辦法遍歷它的成員
WeakSet 有三個(gè)方法:add, delete, has
const ws = new WeakSet() ws.add(1) // TypeError: Invalid value used in weak set ws.add(Symbol()) // TypeError: invalid value used in weak set let ws = new WeakSet() const obj1 = {name: 'imooc' } const obj2 = {age: 5 } ws.add(obj1) ws.add(obj2) ws.delete(obj1) console.log(ws) console.log(ws.has(obj2)) // trueWeakSet 中的對(duì)象都是弱引用,即垃圾回收機(jī)制不考慮 WeakSet 對(duì)該對(duì)象的引用,也就是說,如果其他對(duì)象都不再引用該對(duì)象,那么垃圾回收機(jī)制會(huì)自動(dòng)回收該對(duì)象所占用的內(nèi)存,不考慮該對(duì)象還存在于 WeakSet 之中。
那么它有啥作用呢?
- 避免內(nèi)存泄露(用于存儲(chǔ)DOM節(jié)點(diǎn),而不用擔(dān)心這些節(jié)點(diǎn)從文檔移除時(shí)會(huì)引發(fā)內(nèi)存泄露)
總結(jié)
以上是生活随笔為你收集整理的【ES6(2015)】Set的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uniapp 支付(支付宝,微信支付)
- 下一篇: docker pull php7,Doc