天天看點

ES6的Set對象

Set 對象允許你存儲任何類型的唯一值,無論是原始值或者是對象引用。

1、Set 中的特殊值

  1. +0 與 -0 在存儲判斷唯一性的時候是恒等的,是以不重複;
  2. undefined 與 undefined 是恒等的,是以不重複;
  3. 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}