基本用法
它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构
Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
const set = new Set([1,1,2,3,4,5,5])
console.log([...set])// [1,2,3,4,5]
console.log(Array.from(set))// [1,2,3,4,5] Array.from方法可以将类数组,可迭代对象转换数组
const set2= new Set([1,1,4,5,5])
console.log(set2.size)//3 返回的是去重后的个数
console.log([...set].length)//3 返回的是去重后的个数
const set3= new Set('ababbc')
console.log([...set3].join(''))// 'abc'
const set4 = new Set(document.querySelectorAll('div'));
console.log(set4.size)//2 返回页面中所有div的个数
操作方法
add()
Set类数组中添加数据,并返回Set对象。如果添加的元素与内部有相同的则添加失败,没有相同的则成功
const set = new Set([1,1,2,3,4,5,5])
console.log(set.add(6))// [1,2,3,4,5,6]
console.log(set.add(5))// [1,2,3,4,5,6]
delete()
删除指定的值,并返回boolean值,成功返回true,失败返回false
const set = new Set([1,1,2,3,4,5,5])
console.log(set.delete(6))// false
console.log(set.delete(5))// true
clear()
清除Set中类数组的元素,并返回Set对象
const set = new Set([1,1,2,3,4,5,5])
console.log(set.clear())//Set(0){}
has()
测试Set中类数组的元素是否有与之相同的,返回的boolean值,有相同的返回true,没有相同的返回false
const set = new Set([1,1,2,3,4,5,5])
console.log(set.has(1))// true
console.log(set.has(0))// false
遍历方法
keys():返回键名的遍历器
values():返回键值的遍历器
entries():返回键值对的遍历器
forEach():使用回调函数遍历每个成员
由于 Set 结构键名和键值是同一个值(key就是value),所以keys方法和values方法的行为完全一致。
let set = new Set([1,1,2,3,4,5,5]);
for (let key of set.keys()) {
console.log(key);
}
// 1
// 2
// 3
// 4
// 5
for (let key of set.values()) {
console.log(key);
}
// 1
// 2
// 3
// 4
// 5
for (let key of set.entries()) {
console.log(key);
}
// ["1", "1"]
// ["2", "2"]
// ["3", "3"]
// ["4", "4"]
// ["5", "5"]
//forEach方法的参数依次为键值、键名、集合本身 ,Set 结构的键名就是键值,所以前两个参数都是一样的
set.forEach((key, value) => console.log(`${key}:${value}`))
// 1 : 1
// 2 : 2
// 3 : 3
// 4 : 4
// 5 : 5
Set的应用
const arr1 = [12,23,43,51,11,33,33,84,45,12];
const arr2 = [51,11,33,77,66,88,84,12,789]
//并集
console.log([...arr1,...arr2])
//交集
console.log(new Set([...arr1].filter(x => new Set(arr2).has(x))))
//差集
console.log(new Set([...arr1].filter(x => !new Set(arr2).has(x))))