ES6 提供了新的數據結構 Set。它相似於數組,可是成員的值都是惟一的,沒有重複的值。數組
Set自己是一個構造函數,用來生成 Set 數據結構。數據結構
const s = new Set() s.add(1).add(2).add(1).add(3) //添加,可鏈式調用,不重複 console.log(s); //Set {1,2,3}
Set遍歷對象函數
//set對象遍歷 s.forEach(i=>console.log(i)) for(let i of s) { console.log(i); }
console.log(s.size); //set對象長度 console.log(s.has(100)); //false console.log(s.delete(2)); //true console.log(s); //{1,3} console.log(s.clear()); //清除集合內的所有內容
應用場景code
//數組去重 const arr = [1,1,1,3,2,1,4,4] const ss = new Set(arr) const narr = Array.from(ss) //轉化成真實數組 console.log(ss,narr); const result = [...ss] //轉化成真實數組 console.log(result);
相似於對象,本質上都是鍵值對集合對象
原始的對象key不管什麼類型都會被轉化成字符串接口
Map是嚴格意義上的鍵值對集合,能夠使用任意類型的鍵ip
Map與對象的區別字符串
簡單的說,Object類型就是添加計算屬性,或者經過外部添加屬性,他都會轉化成string,且Object的key只容許string或symbol,而map很好解決了鍵的類型問題get
傳統的添加鍵值對string
const obj = { name:"mcgee" } obj[true] = "value" obj[11] = "value" obj[{a:1}] = "value" console.log(Object.keys(obj)) //[ '11', 'name', 'true', '[object Object]' ]
任意類型的Map鍵值對
const m = new Map() const str = {a:1}; m.set(str,"value") //key , value m.set(11,"asd") console.log(m);
操做方法
console.log(m.size) console.log(m.get(str)) m.delete(11) console.log(m); m.clear() console.log(m);
Map 也能夠接受一個數組做爲參數。該數組的成員是一個個表示鍵值對的數組
const map = new Map([ ['name', '張三'], ['title', 'Author'] ]); map.size // 2 map.has('name') // true map.get('name') // "張三" map.has('title') // true map.get('title') // "Author"
上面實際執行的是
const items = [ ['name', '張三'], ['title', 'Author'] ]; const map = new Map(); items.forEach( ([key, value]) => map.set(key, value) );
支持 iterator接口可被for..of..