石頭理解的set

Set

set相似數組。其成員的值都是惟一的。 數組

數組去重code

const set = new Set([1,2,3,2,4,2,3,4])
console.log(set)
[...new Set(array)] // 返回無重複的數組

Set.add(value) 爲set對象添加一個值
Set.size 返回set對象的長度
Set.delete(value) 刪除set對象中的指定的值,並返回bool結果。
Set.has(value) 檢查set對象中是否有指定的值
Set.clear() 刪除指定set對象中的全部值對象

Set.keys() 返回一個以指定set對象的key組成的類數組對象。
Set.values() 返回一個以指定set對象的value組成的類數組對象。
Set.entries() 返回一個以key和value組成的數組組成的數組。
Set.forEach(fn(value, key) {}) 對set對象進行遍歷操做。io

set對象沒有提供訪問指定值的方法。要想訪問指定值須要轉爲數組後再用數組的方法取指定值。console

let set = new Set(['a', 1, 2, 2, 2, 1, 3])
let arr = [...set] // ['a', 1, 2, 3]
let index = arr.indexOf('a') // 0
console.log(arr[index]) // 'a'

由於set對象在存數據時無重複值。在取時較困難。因此石頭通常使用set對象存放對象,而後檢查是否有某個值,使用數組取數據。
set對象不能判斷對象是否相等。因此不能去重對象。 遍歷

並集引用

let union = new Set([...seta, ...setb])

交集nio

let intersect = new Set([...seta].filter(x => setb.has(x)))

差集方法

let difference = new Set([.seta].filter(x => !setb.has(x)))

WeakSet

  1. 只能存放對象。
  2. 對對象是弱引用。

WeakSet.add(obj) 爲WeakSet對象指定添加的對象。
WeakSet.delete(obj) 返回是否刪除指定的對象。
WeakSet.has(obj) 返回是否存在指定的對象。數據

如今set對象的操做方法、屬性太少。(好比:沒法準確地取出指定的值。)因此把他只作爲一個倉庫對待。操做還要在數組中操做。
它出如今數組對象沒有這些功能的時期。應該是作爲一個數組對象的補充存在。要項目中應當把set/array結合起來使用。
set對象用處少。weakset對象的用處更少。


2018/08/05 by stone

相關文章
相關標籤/搜索