并集
一个集合的并集,是这些集合中所有元素所构成集合
// 将多个数组合并后去重即为这些元素的交集
function union (...arg) {
// 使用flat将数组扁平化即为合并所有元素
// 使用set实例对象快捷去重
return [...new Set(arg.flat(1))]
}
union([1,6,7,43,9,54], [4,7,9,76,54,'6'], [45,7,32,4,2,64])
// [1, 6, 7, 43, 9, 54, 4, 76, '6', 45, 32, 2, 64]
交集
交集是既属于a集合又属于b集合的集合,即交集是所有集合的子集
// 两个数组取交集
// 循环第一个数组,判断每一个元素是否存在于第二个数组中,如果存在即为交集元素
function intersect (...arg) {
return arg[0].filter(item => arg[1].includes(item))
}
intersect([1,6,7,43,9,54], [4,7,9,76,54,'6'])
// 多个一维数组取交集
function intersect (...arg) {
// 循环所有数组中所有的子元素,并以子元素为键,子元素出现的次数为只保存在map实例对象中,
// 判断map对象中的值,如果值等于写入数组的长度,那么该值所对应的键即为所有数组的子集,也就是交集元素
const res = new Map(), intersect = []
// 这里循环时需要去重一下,如果不去重,当一个数组有重复元素出现时,结果很可能会出现问题
arg.forEach(item => [...new Set(item)].forEach(val => res.set(val, res.get(val) ? res.get(val) + 1 : 1)))
res.forEach((value, key) => value === arg.length && intersect.push(key))
return intersect
}
intersect([1,6,7,43,9,54,7], [4,7,9,76,54,'6','1'], [1,424,54,4]) // [54]