set對象容許存儲任何類型的惟一值,不管是原始值或者是對象引用;java
new Set([iterable])數組
參數非必需, 若是傳遞一個可迭代對象,他的全部元素被添加到新的Set中,若是無此參數,則Set爲空函數
返回一個新的Set對象this
set對象是值的集合,元素只會出現一次,即Set中的元素是惟一的.prototype
值得注意的是,NaN被Set認爲是相同的,{}被認爲是不一樣的code
var set = new Set([{},{}]) set //{{},{}} set.size // 2
var set = new Set([NaN,NaN]) set //{NaN} set.size // 1
var arr = [1,2,3,4,4]; var set = new Set(arr) //數組轉換set對象 set //{1,2,3,4} //方法一 Array.from(set) //[1,2,3,4] //方法二 [...set] //[1,2,3,4]
var str = 'siiva'; new Set(str) //{'s','i','v','a'}
mySet.add(value)對象
Set.prototype.size 返回Set實例的成員總數字符串
參數value,必需,須要添加到Set對象的元素的值回調函數
返回Set對象自己it
var mySet = new Set(); mySet.add(1) // {1} mySet.add(2).add('2') //{1,2,'2'} 能夠鏈式,2 '2' set看做不相等 mySet.size //3
has方法返回一個布爾值 來判斷value是否存在Set對象中
mySet.has(value)
返回值爲布爾值.
var mySet = new Set(); mySet.add('siva'); mySet.has('siva') // true mySet.has('hello') // false
delete() 方法能夠從一個 Set 對象中刪除指定的元素。
mySet.delete(value);
返回值爲布爾值,true爲刪除成功
var mySet = new Set(); mySet.add('siva'); mySet.delete('hello') //false mySet.delete('siva') //true mySet.has('siva') //false mySet.size //0
用來清空一個Set對象中的全部元素
mySet.clear()
var mySet = new Set() mySet.add(1).add('1') mySet.size //2 mySet.has('1') //true mySet.clear(); mySet.size //0
Set.prototype.keys() : 返回鍵名的遍歷器
Set.prototype.values():返回鍵值的遍歷器
Set.prototype.entries(): 返回鍵值對的遍歷器
Set.prototype.forEach() :回調函數遍歷
var mySet = new Set(['s','i','v']) for(let i of mySet.keys()){ console.log(i) } // s // i // v for(let i of mySet.values()){ console.log(i) } // s // i // v for(let i of mySet.entries()){ console.log(i) } // ['s','s'] // ['i','i'] // ['v','v'] var otherSet = mySet.entries(); otherSet.next().value // ['s','s'] otherSet // {'i','v'} otherSet.next().value //['i','i'] otherSet // {'v'} otherSet.next().value //['v','v'] otherSet // {} mySet.entries(); // {"s", "i", "v"}
forEach 方法根據集合中元素的順序,對每一個元素都執行提供的 callback 函數一次。
mySet.forEach(callback[, thisArg])
已經被刪除的元素,它是不會執行的,可是,undefined,null會執行
thisArg 當執行callback的時候,this的指向
function callback(value,key,set){ console.log(value,key,set) } new Set(['siva','hello',undefined,null]).forEach(callback) // siva siva {"siva", "hello", undefined, null} // hello hello {"siva", "hello", undefined, null} // undefined undefined {"siva", "hello", undefined, null} // null null {"siva", "hello", undefined, null}
let arr1 = [1,2,3,4,5]; let arr2 = [4,5,6,7,8]; let a = new Set(arr1); let b= new Set(arr2)
數組去重&並集
new Set([...arr1,...arr2]) //{1,2,3,4,5,6,7,8} let arr3 = [...new Set([...arr1,...arr2])] //[1,2,3,4,5,6,7,8]
交集
let arr3 = new Set(arr1.filter(x=>b.has(x))) //{4,5}
差集
let arr3 = new Set(arr1.filter(x=>!b.has(x))) //{1,2,3} let arr4 = new Set(arr2.filter(x=>!a.has(x))) //{6,7,8} [...arr3,...arr4] //[1,2,3,6,7,8]
WeakSet 對象容許你將弱保持對象存儲在一個集合中,其中的每一個對象值都只能出現一次.
無size屬性,且WeakSet對象不可被遍歷枚舉;只能存儲對象,不可放入字符串,數字等數據類型
方法有 WeakSet.prototype.add(value) / WeakSet.prototype.delete(value) / WeakSet.prototype.has(value)