大神地址:來自阮一峯大神的ES6入門書籍javascript
ES6提供了數據結構Set。相似於數組,可是沒有重複值。java
const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for(let i of s ) { console.log(i); //2 3 5 4 }
var set = new Set([1, 2, 3, 4, 4]); [...set]; // [1, 2, 3, 4]
可用於數組去重
[...new Set(array)]
es6
Array.from()
方法能夠將Set結構轉換爲數組Array.from(new Set(array))
segmentfault
let set = new Set(); let a = NaN; let b = NaN; set.add(a); set.add(b); set; //{NaN} 只能加入一個,說明Set內部兩個NaN是相等的
屬性:數組
Set.prototype.constructor
:構造函數,默認就是Set函數Set.prototype.size
:返回實例的成員總數操做方法(方法的具體實現見:我對JS集合的簡單學習):數據結構
add(value)
:添加一個值,返回Set結構自己delete(value)
:刪除某個值,返回布爾值has(value)
:返回布爾值,表示是不是成員clear()
:清除全部成員,無返回值s.add(1).add(2).add(2); //鏈式寫法 s.size(); //2 s.has(3); //false s.delete(2); s.has(2); //false
遍歷方法函數
keys()
:返回鍵名的遍歷器(什麼是遍歷器?Iterator)values()
:返回鍵值的遍歷器entries()
:返回鍵值對的遍歷器forEach()
:使用回調函數遍歷每一個成員這裏要注意Set的鍵名和鍵值是同一個值,因此key()和values()行爲是一致的。學習
let set = new Set(['red', 'green', 'no']); for(let item of set.keys()) { console.log(item); //red green no } for(let item of set.values()) { console.log(item); //red green no } for(let item of set.entries()) { console.log(item); //['red': 'red'] ['green': 'green'] ['no': 'no'] } //對每一個成員執行某種操做,參數依次爲鍵值、鍵名、集合自己 new Set([1, 2, 3]).forEach((value, key) => console.log(value * 2)); //2 4 6
let a = new Set([1, 2, 3]); let b = new Set([4, 3, 2]); //並集 let union = new Set([...a, ...b]); //{1, 2, 3, 4} //交集 let intersect = new Set([...a].filter(x => b.has(x))); //{2, 3} //差集 let difference = new Set([...a].filter(x => !b.has(x))); //{1}
號外:擴展運算符(...)內部使用for...of循環,因此應該知道for of是幹嗎的吧prototype
數組的map()
和filter()
可用於Setcode
let set = new Set([1, 2, 3]); set = new Set([...set].map(x => x * 2)); //set: {2, 4, 6} let set = new Set([1, 2, 3, 4, 5]); set = new Set([...set].filter(x => (x % 2) == 0)); //set {2, 4}