Set 對象允許你存儲任何類型的唯一值,無論是原始值或者是對象引用。
1、Set 中的特殊值
- +0 與 -0 在存儲判斷唯一性的時候是恒等的,是以不重複;
- undefined 與 undefined 是恒等的,是以不重複;
- NaN 與 NaN 是不恒等的,但是在 Set 中隻能存一個,不重複。
let mySet = new Set();
mySet.add(1); // Set(1) {1}
mySet.add(5); // Set(2) {1, 5}
mySet.add(5); // Set(2) {1, 5} 這裡展現了值的唯一性
mySet.add("some text");
// Set(3) {1, 5, "some text"} 這裡展現了類型的多樣性
var o = {a: 1, b: 2};
mySet.add(o);
mySet.add({a: 1, b: 2});
// Set(5) {1, 5, "some text", {…}, {…}}
// 這裡展現了對象之間引用不同不恒等,即使值相同,Set 也能存儲
2、類型轉換
Array
// Array 轉 Set
var mySet = new Set(["value1", "value2", "value3"]);
// 用...操作符,将 Set 轉 Array
var myArray = [...mySet];
String
// String 轉 Set
var mySet = new Set('hello'); // Set(4) {"h", "e", "l", "o"}
// 注:Set 中 toString 方法是不能将 Set 轉換成 String
3、Set 對象作用
(1)數組去重
var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]
(2)并集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}
(3)交集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
(3)差集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}