何为交集/差集/并集/补集?

我们项目中大多数是在与数组斗智斗勇,由于之前项目有使用到类似于差集这种思路 ,便一发不可收拾入了这个坑,在认真思考之后,发现实战项目中很多地方都可以用到这个知识点,于是便写个博客以记录心得感悟


首先要介绍一下何为交集/差集/并集/补集
PS:已经了解的同志们可以从目录直接跳转过去进行阅读


一、数组的交集

1.何为数组的交集?

两个集合A和B的交集是含有所有既属于A又属于B的元素,而没有其他元素的集合 。 A和B的交集写作"A∩B"。形式上:x属于A∩B当且仅当x属于A且x属于B。
例如:集合[1,2,3]和[2,3,4]的交集为[2,3] 。简而言之:两个数组重复的子元素部分为交集。

2.如何用代码实现数组的交集?

直接来最高级的ES6语法

let a = [1,2,3,4,5];
let b = [2,4,6,8,10];
let c = a.filter(x => new Set(b).has(x));
console.log(c);
//输出的结果为[2, 4]

3.实际项目中哪些地方可以使用到此技能?

可以用交集来检测数组之前和之后是否发生了改变,如果改变了再进行接口数据请求
否则就算用户进行操作,因为数据没有发生改变的原因,不进行对应的接口请求(性能优化细节)

二、数组的差集

1.何为数组的差集?

一般地,设A,B是两个集合,由所有属于A且不属于B的元素组成的集合 ,叫做集合A减集合B(或集合A与集合B之差),类似地,对于集合A. B ,我们把集合{x/x∈A,且x¢B}叫做A与B的差集 ,记作A-B记作A-B(或A\B),即A-B={x|x∈A,且x ¢B}(或A\B={x|x∈A ,且x ¢B} B-A={x/x∈B且x¢A} 叫做B与A的差集

2.如何用代码实现数组的差集?

直接来最高级的ES6语法

let a = [1,2,3,4,5];
let b = [2,4,6,8,10];
let c = a.filter(x => !new Set(b).has(x));
console.log(c);
//输出的结果为[1, 3, 5]

3.实际项目中哪些地方可以使用到此技能?

在项目中权限赋予等功能中,admin权限字段子类很多会包含user字段子类等一些权限的字段,这个时候我们便可以利用差集来只添加那些不重复的子集(性能优化细节

三 、数组的并集

1.何为数组的并集?

给定两个集合A,B,把他们所有的元素合并在一起组成的集合 ,叫做集合A与集合B的并集,记作A∪B,读作A并B。

2.如何用代码实现数组的并集?

直接来最高级的ES6语法

let a = [1,2,3,4,5]
let b = [2,4,6,8,10]
let c= Array.from(new Set([...a, ...b]));
console.log(c)
//最终的输出结果为[1, 2, 3, 4, 5, 6, 8, 10]

3.实际项目中哪些地方可以使用到此技能?

并集在数组中的作用其实类似于枚举,把两个数组不重复的属性给枚举出来之后,返回一个新的数组,它在项目中并不经常使用,基本上用来合并一个数据A和数据B所有的子项(不经常使用)
由于有点鸡肋,随便放一张图.

四 、数组的补集

1.何为数组的补集?

补集的意思是一般地 ,设S是一个集合,A是S的一个子集,由S中所有不属于A的元素组成的集合 ,叫做子集A在S中的绝对补集 。在集合论和数学的其他分支中,
存在补集的两种定义:相对补集绝对补集

2.如何用代码实现数组的补集?

直接来最高级的ES6语法

let a = [1,2,3,4,5]
let b = [2,4,6,8,10]
let c = Array.from(new Set([...a, ...b]));
console.log(c)
//最后的数据结果为[1, 3, 5, 6, 8, 10]

3.实际项目中哪些地方可以使用到此技能?

简单而言,补集就是两个数组不重复的所有子集给抽离出来,然后融合成一个集合的意思,由于此方法更加鸡肋,便不再上实例说明 。
最后放上一张镇楼图

总结

好记性不如烂笔头
随时随地给自己对项目的状态进行实时的记录,想来以后回忆起来也是极美的

明天,又是充满希望的一天!

本文版权归趣快排营销www.SEOguruBLOG.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ㊣61910465