JavaScript:交集和差集的应用场景

这篇具有很好参考价值的文章主要介绍了JavaScript:交集和差集的应用场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在集合A和集合B中,属于集合A,同时也属于集合B的元素组成的集合,就是交集

在A中所有不属于集合B元素,组合成集合,就是差集

那么在平时的开发中,如何使用差集和交集来解决问题呢?

现在有这样的场景,在一个表格编辑数据后,要把编辑前的数据和修改后的数据,汇总。

源数据为:

const arr1 = [{ name: 11, id: 1 }, { name: 21, id: 2 }, { name: 31, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }];

在页面中表现为:

JavaScript:交集和差集的应用场景,JavaScript进阶知识,javascript,java,开发语言

现在删除第一行数据,第二行的名字改为2109,第三行的名字改为3321;然后新增两行,分别为:71、81。

数据如下:

const arr2 = [{ name: 2109, id: 2 }, { name: 3321, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }, { name: 71, id: null }, { name: 81, id: null }];

页面为:

JavaScript:交集和差集的应用场景,JavaScript进阶知识,javascript,java,开发语言
由于是新增数据还没有提交保存,所以对应的序号,也就是ID为空。

最终想要的效果图下图所示:

JavaScript:交集和差集的应用场景,JavaScript进阶知识,javascript,java,开发语言
需要在表格中体现那些数据是修改、删除、新增,哪些数据没有改变。

思路:

  1. 源数据是一个数组arr1;
  2. 修改后的数据也是一个数组arr2;
  3. 删除的数据,在数组arr1中有,数组arr2中没有;
  4. 修改的数据,在数组arr1和arr2中,都找对应的ID;
  5. 新增的数据,只出现在数组arr2中。

那么数组arr2与数组arr1的差集,就是新增的数据:

let add = arr2.filter(x => arr1.every(y => y.id != x.id))

数组arr1与数组arr2的差集,就是删除的数据:

let del = arr1.filter(x => arr2.every(y => y.id != x.id))

修改或者没有修改数据,就是数组arr1和数组arr2的交集:

// arr1、arr2的交集
let arr12Inter = arr1.filter(x => arr2.some(y => x.id === y.id))
let arr21Inter = arr2.filter(x => arr1.some(y => x.id === y.id))

最后一步,就是组合所有的差集、交集,汇总成新的数组:

for (let index = 0; index < arr12Inter.length; index++) {
    newArr.push({ oldData: arr21Inter[index], newData: arr12Inter[index] })
}

del.forEach(item => newArr.push({ oldData: item, newData: null }))
add.forEach(item => newArr.push({ oldData: null, newData: item }))

完整代码:

const arr1 = [{ name: 11, id: 1 }, { name: 21, id: 2 }, { name: 31, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }];

const arr2 = [{ name: 2109, id: 2 }, { name: 3321, id: 3 }, { name: 41, id: 4 }, { name: 51, id: 5 }, { name: 61, id: 6 }, { name: 71, id: null }, { name: 81, id: null }];
let newArr = [];
// arr1——>arr2的差集:删除
let del = arr1.filter(x => arr2.every(y => y.id != x.id))

// arr2——>arr1的差集:新增
let add = arr2.filter(x => arr1.every(y => y.id != x.id))

// arr1、arr2的交集:修改
let arr12Inter = arr1.filter(x => arr2.some(y => x.id === y.id))
let arr21Inter = arr2.filter(x => arr1.some(y => x.id === y.id))

console.log("arr1与arr2的差集:", del)
console.log("arr2与arr1的差集:", add)
console.log("交集", arr12Inter, arr21Inter)

for (let index = 0; index < arr12Inter.length; index++) {
    newArr.push({ oldData: arr21Inter[index], newData: arr12Inter[index] })
}

del.forEach(item => newArr.push({ oldData: item, newData: null }))
add.forEach(item => newArr.push({ oldData: null, newData: item }))

console.log("汇总:", newArr)

JavaScript:交集和差集的应用场景,JavaScript进阶知识,javascript,java,开发语言

使用交集、差集,仅仅是一种方式!文章来源地址https://www.toymoban.com/news/detail-657817.html

到了这里,关于JavaScript:交集和差集的应用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript场景应用:Canvas实战开发一个二维折线图插件

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:100个JavaScript的小应用。 🎉欢迎 👍点赞✍评论⭐收藏 折线图是一种常见的数据

    2024年02月14日
    浏览(31)
  • sql求交集与差集

    日常工作中,针对两个表A,B,求A与B表中同一个字段的交集与差集是常见需求,下面我们来总结一下求交集与差集的方法。 假设现在有两张表A,B,A,B表中均有一个字段为id,现在我们想求 A与B中都存在的id有多少个(去重),在A中但不在B中的id有多少个。 1.1 通过join求交集 要求

    2023年04月17日
    浏览(27)
  • laravel 两个集合取交集、并集、差集

    交集: 使用intersect()函数,用于获取两个集合的交集: 并集:使用union()函数,用于获取两个集合的并集: 差集:使用diff()函数,用于获取两个集合的差集:

    2024年02月12日
    浏览(59)
  • python 计算列表的交集,并集,差集

    如果是列表的话,先将列表转为集合,使用集合去操作,返回的结果也为集合 比如两个列表: 1. 并集,就是a和b的所有元素 2. 差集,b有,a没有的元素 3. 交集,ab共有的元素 4. 对称差集,a和b所有不属于set(b) set(a)的集合

    2024年02月15日
    浏览(46)
  • go 计算map 差集、并集、交集

    原文链接: https://www.zhoubotong.site/post/95.html 某些业务场景可能需要实现两个或者多个map 的交差并集,一下举个简单的demo, 思路其实并不复杂: 输出: 代码中有简单说明,不难看出实现过程其实比较简单。

    2023年04月23日
    浏览(34)
  • php 两个数组取交集、并集、差集

    php 两个数组取交集、并集、差集 交集:array_intersect() 并集:array_merge() 差集:array_diff() laravel 两个集合取交集、并集、差集 交集: 使用intersect()函数,用于获取两个集合的交集: 并集:使用union()函数,用于获取两个集合的并集: 差集:使用diff()函数,用于获取两个集合的

    2024年02月12日
    浏览(32)
  • 【Java】求两集合的交集、并集、差集

    1、removeAll方法:从list中删除指定集合中包含的所有元素。 2、retainAll方法:从list中删除指定集合中不包含的所有元素。 3、addAll方法:用来向Set集合添加另一个集合对象所包含的所有内容。 参考链接:https://www.cnblogs.com/hxf-zb/p/16102135.html 利用集合的contains方法,来对比第二个

    2024年02月16日
    浏览(31)
  • Java 集合操作之交集、并集和差集

    在 Java 编程中,经常需要对集合进行一些操作,比如取两个集合的交集、并集和差集。本文将介绍如何使用 Java 集合框架中的方法来实现这些集合操作,并通过源码解析来深入了解其实现原理。 先上代码 执行结果 此处各操作会改动原始集合,所以此处的操作都是创建了一个

    2024年02月09日
    浏览(31)
  • HuTool工具类 CollUtil 实现多个集合的交集、差集

    验证用数据集准备: 一、交集 1、不去重交集 输出: 交集结果:[4, 5, 5] 2、去重交集

    2024年02月05日
    浏览(70)
  • java8集合操作(排序、取交集、并集、差集、去重并集)分组

    一、List集合转换成Set集合 Set@NotNull Long ids =entityList.stream().filter(e - e != null).map(UserCopyPointEntity::getPointId).collect(Collectors.toSet()); 二、集合map的循环 map.forEach((k, v) - { System.out.println(k + \\\"----\\\" + v); }); 三、集合排序,名称排序,顺序排序 if (result.size() 0) { // 楼层排序, 从小到大排序

    2024年02月16日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包