set介绍
Set
函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
const set = new Set([1, 2, 3, 4, 4])
console.log(set); // {1, 2, 3,4}
Set 实例的属性和方法
Set.prototype.size
:返回Set
实例的成员总数。
const set = new Set([1, 2, 3, 4, 4])
set.size // 4
Set.prototype.add(value)
:添加某个值,返回 Set 结构本身。
set.add(1) // {1, 2, 3, 4, 8}
Set.prototype.delete(value)
:删除某个值,返回一个布尔值,表示删除是否成功。
set.delete(8) // true
console.log(set); // {1, 2, 3,4}
Set.prototype.has(value)
:返回一个布尔值,表示该值是否为Set
的成员。
set.has(3) // true
set.has(8) // false
Set.prototype.clear()
:清除所有成员,没有返回值。
Set.clear()
console.log(set) // Set(0) {}
使用场景
可以通过set构造函数
+ ...
扩展运算符实现数组去重
const set = new Set([1, 2, 3, 4, 4])
[...set] // [1,2,3,4]
也可以实现字符串去重
[...new Set('ababbc')].join('') // 'abc'
Array.from
方法可以将 Set 结构转为数组。
const items = new Set([1, 2, 3, 4, 5]);
const array = Array.from(items); // [1, 2, 3, 4, 5]
取并集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let union = new Set([...a, ...b]); // {1, 2, 3, 4}
取交集 a和b都有的值
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
b没有a的哪一项
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}