前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数组交集差集并集

数组交集差集并集

作者头像
OBKoro1
发布2020-10-27 11:55:32
2K0
发布2020-10-27 11:55:32
举报
文章被收录于专栏:OBKoro1的前端分享

数组交集差集并集

有任意两个数组,每个数组里面的元素不重复,找出它们的交集、差集和并集。

交集、差集和并集是什么鬼?

  1. 交集

由所有属于集合 A 且属于集合 B 的元素所组成的集合,叫做集合 A 与集合 B 的交集(intersection),记作 A∩B

交集百度百科

  1. 差集

以属于 A 而不属于 B 的元素为元素的集合成为 A 与 B 的差。(本文栗子,还会求出属于 B 不属于 A 的集合)

差集百度百科

  1. 并集

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

并集百度百科

includes 判断是否包含:

代码语言:javascript
复制
let one = [1, 2, 3, 4, 5];
let two = [2, 3, 4, 7];
const intersection = (a, b) => {
  // a b数组的交集
  let arr = a.filter(v => {
    // b是否包含a的元素,包含就返回true,交集
    return b.includes(v);
  });
  return arr;
};
const difference = (a, b) => {
  // a b 数组的差集
  let arr = [...a, ...b].filter(v => {
    // a和b是否包含v 不包含返回!false  出现有一个不包含(另一个数组就包含 找到差值),就返回true 添加进数组
    return !a.includes(v) || !b.includes(v);
  });
  return arr;
};

const unionArr = (a, b) => {
  return Array.from(new Set([...a, ...b])); // 并集可以理解为合并数组去重,直接用set即可
};
console.log(difference(one, two), intersection(one, two), unionArr(one, two));

事实上,还可以改成indexOf来判断是否包含,但是要注意indexOf是不能识别NaN的。

使用 Set 来判断:

代码语言:javascript
复制
function arrSet(a, b, type) {
  let set;
  a = new Set(a);
  b = new Set(b);
  if (type === 'difference') {
    // ab数组差集
    set = new Set([...a, ...b].filter(x => !b.has(x) || !a.has(x)));
  } else if (type === 'intersection') {
    // ab数组交集
    set = new Set([...a].filter(x => b.has(x)));
  } else {
    // ab数组并集
    set = new Set([...a, ...b]);
  }
  return Array.from(set); // 转为set
}
console.log(
  arrSet(one, two, 'difference'),
  arrSet(one, two, 'intersection'),
  arrSet(one, two, 'union')
);

鼓励我一下:

觉得还不错的话,给我的项目点个star吧

游泳、健身了解一下:博客、前端算法、公众号

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数组交集差集并集
    • 交集、差集和并集是什么鬼?
      • includes 判断是否包含:
        • 使用 Set 来判断:
          • 鼓励我一下:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档