新增長的數據類型 相似於數組 可是和數組不一樣的地方就是 裏面不會存在相同的值,在裏面 NaN都只能出現一個,可是裏面有一個問題,就是引用類型的值是不會相等的api
let set = new Set(); set.add({}); set.size // 1 set.add({}); set.size // 2
如何使用
let set = new Set();
參數(數組 或者 具備 iterator接口的其餘數據)
// 例一 const set = new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] // 例二 const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size // 5 // 例三 const set = new Set(document.querySelectorAll('div')); set.size // 56 // 相似於 const set = new Set(); document .querySelectorAll('div') .forEach(div => set.add(div)); set.size // 56
特殊的應用 數組去重
[...new Set(array)]
所有的api 增長 刪除 查找 清除 (沒得修改)
Set.prototype.constructor:構造函數,默認就是Set函數。 Set.prototype.size:返回Set實例的成員總數。 add(value):添加某個值,返回 Set 結構自己。 delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。 has(value):返回一個布爾值,表示該值是否爲Set的成員。 clear():清除全部成員,沒有返回值。
s.add(1).add(2).add(2); // 注意2被加入了兩次 s.size // 2 s.has(1) // true s.has(2) // true s.has(3) // false s.delete(2); s.has(2) // false
Array.from方法能夠將 Set 結構轉爲數組。
const items = new Set([1, 2, 3, 4, 5]); const array = Array.from(items); // 數組去重的函數 function dedupe(array) { return Array.from(new Set(array)); }
遍歷的方法數組
keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():使用回調函數遍歷每一個成員函數
須要特別指出的是,Set的遍歷順序就是插入順序。這個特性有時很是有用,好比使用 Set 保存一個回調函數列表,調用時就能保證按照添加順序調用。 prototype
set = new Set([1, 4, 9]); set.forEach((value, key) => console.log(key + ' : ' + value)) // 1 : 1 // 4 : 4 // 9 : 9
咱們能夠簡介使用數組的方法 先轉換爲數組 利用 Array.from()或者 [...] 解構賦值
let set = new Set([1, 2, 3]); set = new Set([...set].map(x => x * 2)); // 返回Set結構:{2, 4, 6}