跳至主要內容

JavaScript ES6 Set 对象

h7ml大约 1 分钟约 416 字

JavaScript ES6 Set 对象

  • 原型方法
    • add()、delete()、has()、clear()、 size
  • Set 对象允许存储任何类型的唯一值,原始值或引用值都可。
  • 特殊值
    • +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复。
    • undefined 与 undefined 是恒等的,所以不重复。
    • NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。

创建

let mySet = new Set();
mySet.add(5); // Set(1) {5}
mySet.add(5); // Set(1) {5} 值的唯一性

mySet.add({ a: 1, b: 2 });
mySet.add({ a: 1, b: 2 });
// Set(5) {1, {…}, {…}}
// 对象之间引用不同不恒等,即使值相同,Set 也能存储

转换

// Array 转 Set
var mySet = new Set(['value1', 'value2', 'value3']); // {"value1", "value2", "value3"}

// 用...操作符,将 Set 转 Array
var myArray = [...mySet]; // ["value1", "value2", "value3"]

// String
// String 转 Set
var mySet = new Set('hello'); // Set(4) {"h", "e", "l", "o"}
// 注:Set 中 toString 方法是不能将 Set 转换成 String

数组去重

var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]

并集

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}
/* 解构传入,唯一值,相当于去重 */

交集

var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);

Set.has(x) 是 set 中的一个方法。

判断当前 set 对象 中是否含有 x,返回 true/false。

var intersect = new Set([...a].filter((x) => b.has(x))); // {2, 3}

[...a] 解构成数组。filter 过滤

传入 x,返回 set 对象 b 中是否存在 x

存在返回 true,不存在返回 false 被过滤掉

差集

与交集同理

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}