并集

一个集合的并集,是这些集合中所有元素所构成集合

  1. // 将多个数组合并后去重即为这些元素的交集
  2. function union (...arg) {
  3. // 使用flat将数组扁平化即为合并所有元素
  4. // 使用set实例对象快捷去重
  5. return [...new Set(arg.flat(1))]
  6. }
  7. union([1,6,7,43,9,54], [4,7,9,76,54,'6'], [45,7,32,4,2,64])
  8. // [1, 6, 7, 43, 9, 54, 4, 76, '6', 45, 32, 2, 64]

交集

交集是既属于a集合又属于b集合的集合,即交集是所有集合的子集

  1. // 两个数组取交集
  2. // 循环第一个数组,判断每一个元素是否存在于第二个数组中,如果存在即为交集元素
  3. function intersect (...arg) {
  4. return arg[0].filter(item => arg[1].includes(item))
  5. }
  6. intersect([1,6,7,43,9,54], [4,7,9,76,54,'6'])
  7. // 多个一维数组取交集
  8. function intersect (...arg) {
  9. // 循环所有数组中所有的子元素,并以子元素为键,子元素出现的次数为只保存在map实例对象中,
  10. // 判断map对象中的值,如果值等于写入数组的长度,那么该值所对应的键即为所有数组的子集,也就是交集元素
  11. const res = new Map(), intersect = []
  12. // 这里循环时需要去重一下,如果不去重,当一个数组有重复元素出现时,结果很可能会出现问题
  13. arg.forEach(item => [...new Set(item)].forEach(val => res.set(val, res.get(val) ? res.get(val) + 1 : 1)))
  14. res.forEach((value, key) => value === arg.length && intersect.push(key))
  15. return intersect
  16. }
  17. intersect([1,6,7,43,9,54,7], [4,7,9,76,54,'6','1'], [1,424,54,4]) // [54]