構造
const set = new Set([1, 2, 3, 4, 4]);
可接受的參數為所有具有iterable 接口的數據
特性:
類似數組,無重復值。
const set = new Set([1, 2, 3, 4, 4]); [...set] //1,2,3,4
注意點:
1.成員值之間的重復值判斷類似於‘===’,但是多個NaN會被判斷為相等
const set = new Set([1,NaN, NaN, 4, '4']); console.log(...set)
2.兩個對象總不相等
const set = new Set([{}, {},{name:'shyno'},{name:'shyno'}]); console.log(...set)
3.無鍵只有值
const arr = [1,2,2,3,4,5,5,6] let obj = {name:'shyno'} const set = new Set(arr); const setArr = Array.from(set) console.log(Object.keys(arr),Object.keys(obj),Object.keys(set))
(可以看出set的鍵是空的)
4.Set並不是數組
const set = new Set([{}, {},{name:'shyno'},{name:'shyno'}]); document.write(set[0]) //undefined console.log(set.concat([1,2])) //set.concat is not a function
(1)Set可以用於數組去重,但是,需要把Set再轉成數組
const set = new Set([1,2,3,3,4,4,5]); const arr = Array.from(set) console.log(arr[0],arr.concat(['1','2']))
(2)Set也可以用於字符串去重
const set = new Set('aabbccdee'); const arr = Array.from(set) console.log(arr[0],arr.concat(['1','2']))
(3)其他具有iterable 接口的數據也可以用這種方法去掉重復的值
屬性和方法
構造函數:Set.prototype.constructor
console.log(Set.prototype.constructor)
長度/尺寸/成員總數:Set.prototype.size
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log('原數組長度',arr.length,'set的成員總數',set.size,'set轉數組之后的長度',setArr.length)
添加成員:add()------添加某個值,返回 Set 結構本身
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); set.add(2) const setArr = Array.from(set) console.log(set,set.add('shyno'))
(注意這里打印出來的結果一樣,說明它的返回值就是set自身)
重復的不加,不同的數據類型也可以加
刪除成員:delete()------刪除某個值,返回一個布爾值,表示刪除是否成功
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log(set) console.log(set .delete(2)) console.log(set) console.log(set .delete(2))
(set無重復值,所以同樣的操作,只有第一次會成功)
判斷存在否:has(value)-----返回一個布爾值,表示該值是否為Set
的成員
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log(set) console.log(set .has(2)) console.log(set .delete(2)) console.log(set .has(2)) console.log(set)
(這里明明打印set的時候沒有2,但是has(2)確實true,刪除操作后得到了false)
清空成員:clear()-----清除所有成員,沒有返回值
const arr = [1,2,2,3,4,5,5,6] const set = new Set(arr); const setArr = Array.from(set) console.log(set) console.log(set .clear()) console.log(set .delete(2)) console.log(set.add(2)) console.log(set .has(2)) console.log(set)