一、交集、并集、差集和补集的概念
注意:在集合论和数学的其他分支中,存在补集的两种定义:相对补集和绝对补集。
1、相对补集
若A 和B 是集合,则A 在B 中的相对补集是这样一个集合:其元素属于B但不属于A,B - A = { x| x∈B且x∉A}。
2、绝对补集
若给定全集U,有A⊆U,则A在U中的相对补集称为A的绝对补集(或简称补集),写作∁UA。
二、代码实现
/**
@functionname:initTable
@description:获得元素唯一的数组
@author:yzh
@param:arr
@date:2018-09-02
*/
function unique(arr){
var newArr = new Array();
for(var i = 0; i<arr.length;i++){
if(!contains(newArr,arr[i])){
newArr.push(arr[i]);
}
}
return newArr;
}
/**
@functionname:contains
@description:判断某个数组的元素是否在另一个数组中
@author:yzh
@param:arr1,
@param:arr2Value,
@date:2018-09-02
*/
function contains(arr1,arr2Value){
for(var i = 0;i<arr1.length;i++){
if(arr1[i] == arr2Value){
return true;
}
}
return false;
}
/**
@functionname:intersect
@description:求两个数组的交集
@author:yzh
@param:arr1,
@param:arr2,
@date:2018-09-02
*/
function intersect(arr1,arr2){
var intersectArr = [];
$.each(unique(arr1),function(i,v){
if(contains(arr2,v)){
intersectArr.push(v);
}
});
return intersectArr;
}
/**
@functionname:union
@description:求两个数组的并集
@author:yzh
@param:arr1,
@param:arr2,
@date:2018-09-02
*/
function union(arr1,arr2){
//合并两个数组的元素==>concat()
return unique(arr1.concat(arr2));
}
/**
@functionname:minus
@description:求两个数组的一个数组相对另一个数组的差集
@author:yzh
@param:arr1,
@param:arr2,
@date:2018-09-02
*/
function minus(arr1,arr2){
var minusArr = [];
$.each(unique(arr1),function(i,v){
if(!contains(arr2,v)){
minusArr.push(v);
}
});
return minusArr;
}
/**
@functionname:complement
@description:求两个数组中某个数组的补集
@author:yzh
@param:arr1,
@param:arr2,
@date:2018-09-02
*/
function complement(arr1,arr2){
return minus(union(arr1,arr2),intersect(arr1,arr2));
}
/**测试:
var arr = [1,2,4,5,7,7,3,4,3,67,78];
var arr2 = [1,0,2,33,56,78,90,34,2,45,2,78,23,5,67]
//元素去重
console.info(unique(arr));
//获取两个数组的交集
console.info(intersect(arr,arr2));
//获取两个数组的并集
console.info(union(arr,arr2));
//获取arr2数组相对arr的差集
console.info(minus(arr,arr2));
//获取两个数组(交集)的补集
console.info(complement(arr,arr2).sort());
output:
(8)[1, 2, 4, 5, 7, 3, 67, 78]
(5)[1, 2, 5, 67, 78]
(15)[1, 2, 4, 5, 7, 3, 67, 78, 0, 33, 56, 90, 34, 45, 23]
(3)[4, 7, 3]
(10)[0, 23, 3, 33, 34, 4, 45, 56, 7, 90]
**/