ES6學習筆記 —— Set與Map
阿新 • • 發佈:2022-05-09
Set 物件
Set 物件允許你儲存任何型別的唯一值,無論是原始值或者是物件引用。
Set 中的特殊值
Set 物件儲存的值總是唯一的,所以需要判斷兩個值是否恆等。有幾個特殊值需要特殊對待:
- +0 與 -0 在儲存判斷唯一性的時候是恆等的,所以不重複;
- undefined 與 undefined 是恆等的,所以不重複;
- NaN 與 NaN 是不恆等的,但是在 Set 中只能存一個,不重複。
Set宣告
const set = new Set()
Set屬性
- size:返回 Set 物件中值的數量
Set方法
- add(value): 在Set物件尾部新增一個元素,返回該Set物件。
- delete(value): 移除Set的中與這個值相等的元素,有則返回true,無則返回false。
- clear(): 清楚Set的所有元素。
- has(value): 是否存在這個值,如果存在為 true,否則為false。
- keys():返回鍵名的遍歷器。
- values():返回鍵值的遍歷器。
- entries():返回鍵值對的遍歷器。
- forEach():使用回撥函式遍歷每個成員。
Set方法使用:
let mySet = new Set() //add() mySet.add('1') mySet.add(1) console.log(mySet) // Set(2) {1, "1"} //size console.log(mySet.size) // 2 //delete() mySet.delete('1') console.log(mySet) // Set(1) {1} //has() console.log(mySet.has(1)) // true console.log(mySet.has(2)) // false //clear() mySet.clear() console.log(mySet) // Set(0) {} let arr = [{id: 1}, {id: 2}, {id: 3}] let mySet1 = new Set(arr) // keys() for (let key of mySet1.keys()) { console.log('key:', key); // key:{id: 1} key:{id: 2} key:{id: 3} } //values() for (let key of mySet1.values()) { console.log('values:', key); // values:{id: 1} values:{id: 2} values:{id: 3} } //entries() for (let data of mySet1.entries()) { console.log('entries:', data); // entries:[{id: 1},{id: 1}] entries:[{id: 2},{id: 2}] entries:[{id: 3},{id: 3}] } //forEach mySet1.forEach((item) => { console.log('forEach:', item) // forEach:{id: 1} forEach:{id: 2} forEach:{id: 3} });
Set物件應用
// 陣列去重 var mySet = new Set([1, 2, 3, 4, 4]); [...mySet]; // [1, 2, 3, 4] // 字串去重 [...new Set('ababbc')].join('') // "abc" let a = new Set([1, 2, 3]) let b = new Set([2, 4, 3]) //並集 let union = new Set([...a, ...b])) // {1, 2, 3, 4} //交集 let intersect = new Set([...a].filter(x => b.has(x))) // {2, 3} // 差集 // (a 相對於 b 的)差集 let difference = new Set([...a].filter(x => !b.has(x))) // {1} // 對映 // 方法一 let set = new Set([1, 2, 3]); set = new Set([...set].map(val => val * 2)); // set的值是2, 4, 6 // 方法二 let set = new Set([1, 2, 3]); set = new Set(Array.from(set, val => val * 2)); // set的值是2, 4, 6