ES6 Set集合

Set是ES6给开发者带来的一种新的数据结构,可以理解为值的集合。我们平时见到的数组Array也是一种数据结构,但是Set跟其他数据结构不同的地方就在于:它的值不会有重复项。

//1、创建出一个Set结构
    var s = new Set();    
    console.log(s);//Set {}
//2、创建含内容的Set结构
    var s = new Set([1,2,3]);    
    console.log(s);//Set {1, 2, 3}  

 //注意:
//1、Set 集合不会添加重复的成员。
//2、Set 构造函数可以接受所有可迭代对象作为参数。
//因此也出现了l两种数组去重的方法
[...new Set( [1,2,3,4,4] ) ]
//[1,2,3,4]
//或者
Array.from( new Set( [1,2,3,4,5,5] )  )
//[1,2,3,4,5]

Set实例的属性和方法

Set结构的实例有属性:
Set.prototype.constructor:构造函数,默认就是Set函数;
Set.prototype.size:返回Set实例的成员总数;
Set实例的方法分为两类:操作方法和遍历方法;
add(value):添加某个值,返回Set结构本身

//使用add方法添加成员
//Set集合里 (NaN===NaN) 为true
	set.add(NaN).add(NaN);

    s.add(1);
    s.add(2);
    s.add(3);    
    console.log(s);//Set {1, 2, 3,NaN}

delete(value):删除某个值,返回一个布尔值,表示删除是否成功;

//用数组作为参数初始化
    var s = new Set([1,2,3]);
    console.log(s);//Set {1, 2, 3}

    //使用delete方法删除指定值
    s.delete(2);//结果:true
    s.delete(4);//结果:false

    console.log(s);//Set {1, 3}
//我们使用delete( )方法删除了指定值:2,结果返回true。
//删除指定值:4的时候,返回false,原因是变量s中找不到数字4。

has(value):返回一个布尔值,表示该值是否为Set的成员;

var s = new Set([1,2,3]);
s.has(1);//true
s.has(4);//false

clear() :清除所有成员,没有返回值;

var s = new Set([1,2,3]);    
console.log(s);//Set {1, 2, 3}
s.clear();    
console.log(s);//Set {}

entries( )方法:返回一个键值对的遍历器。

var s = new Set(['a','b','c']);
s.entries();    //结果:SetIterator {["a", "a"], ["b", "b"], ["c", "c"]}
//注意得到的结果,成员值“a”对应的键值对是[“a”,”a”],也就是说:Set结构是键名和键值是同一个值。

keys( ) 和 values( ) 方法
keys( )方法:返回键名的遍历器。
values( )方法:返回键值的遍历器。

var s = new Set(['a','b','c']);
s.keys(); /SetIterator {"a", "b", "c"}
s.values();//SetIterator {"a", "b", "c"}

遍历方法
for…of 循环
Set 集合默认可遍历,因此可以直接用for…of循环遍历 Set 集合,会依次返回集合的成员。

for (let item of new Set(["A", "B"])) {
    console.log(item);
}
//输出:A B

forEach() 方法对集合中的每一个成员运行给定函数。这个方法没有返回值,可以替代for…of循环使用。该方法的回调函数中一共有三个参数,依次为成员、索引值和集合本身。但由于Set 集合没有索引值的概念,因此第一个参数与第二个参数的值永远都是一样的。

new Set([1, 2, 3]).forEach((v, i, s) => console.log(v + ":" + i));
//1:1 2:2 3:3


Set集合的用处前面说了一个数组去重
Set 集合和filter() 方法相结合可以很容易地实现数组的并集、交集和差集。

const arr1 = [1, 2, 3],
      arr2 = [3, 4, 5];

//数组并集
console.log([...new Set([...arr1, ...arr2])]);
//输出:[1, 2, 3, 4, 5]

//数组交集
const cross = [...new Set(arr1)].filter(item => arr2.indexOf(item) >= 0)
console.log(cross)
//输出:[3]

//数组差集
console.log([...new Set([...arr1,...arr2])].filter(item=> cross.indexOf(item) < 0))
//输出:[1, 2,4, 5]


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值