你真的了解数组吗?(交集差集并集补集在项目中的使用)
Posted 毕竟我是崔战神阿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你真的了解数组吗?(交集差集并集补集在项目中的使用)相关的知识,希望对你有一定的参考价值。
何为交集/差集/并集/补集?
我们项目中大多数是在与数组斗智斗勇,由于之前项目有使用到类似于差集这种思路,便一发不可收拾入了这个坑,在认真思考之后,发现实战项目中很多地方都可以用到这个知识点,于是便写个博客以记录心得感悟
首先要介绍一下何为交集/差集/并集/补集
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, 2, 3, 4, 5, 6, 8, 10]
3.实际项目中哪些地方可以使用到此技能?
简单而言,补集就是两个数组不重复的所有子集给抽离出来,然后融合成一个集合的意思,由于此方法更加鸡肋,便不再上实例说明。
最后放上一张镇楼图
总结
好记性不如烂笔头
随时随地给自己对项目的状态进行实时的记录,想来以后回忆起来也是极美的
明天,又是充满希望的一天!
以上是关于你真的了解数组吗?(交集差集并集补集在项目中的使用)的主要内容,如果未能解决你的问题,请参考以下文章