JavaScript求数组的交集和差集

news2024/12/25 17:09:08

1. 求交集(从2个数组中找到相同的元素, 组成新数组, 注意去重):

1) Set+filter+includes

// 求交集:
const arr1 = [0, 1, 2]
const arr2 = [3, 2, 0]
function intersectSet(arr1, arr2) {
    return [...new Set(arr1)].filter(item=>arr2.includes(item))
}
const values = intersectSet(arr1, arr2)
console.log(values, ':values') // [0, 2]

2)Map+forEach+filter

// 求交集
// 引用类型
function intersect(arr1, arr2, key) {
    const map = new Map()
    arr1.forEach(val => map.set(val[key], val[key]))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => map.has(val[key]))
}
// 原始数据类型:
function intersectBase(arr1, arr2) {
    const map = new Map()
    arr1.forEach(val => map.set(val, val))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => map.has(val))
}

注意事项: 大量数据时, includes查找太耗性能, 如果已经有Set和Map存下的数据, 使用has方法查找性能会稍好一点

2. 求差集

很简单, 和上面的求交集的做相反的判断就行了

// 求差集---
// 引用类型
function difference(arr1, arr2, key) {
    const map = new Map()
    arr1.forEach(val => map.set(val[key], val[key]))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => !map.has(val[key]))
}
// 原始数据类型:
function differenceBase(arr1, arr2) {
    const map = new Map()
    arr1.forEach(val => map.set(val, val))// map.set第二个参数不传相当于传了undefined
    console.log(map, ':map====')
    return arr2.filter(val => !map.has(val))
}
const  a1 = [{p:0},{p:1},{p:2}]
const  a2 = [{p:3},{p:2},{p:1}]
console.log(difference(a1, a2, 'p'))
const arr1 = [0, 1, 2]
const arr2 = [3, 2, 0]
console.log(differenceBase(arr1, arr2))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1049122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

26593-2011 无损检测仪器 工业用X射线CT装置性能测试方法

声明 本文是学习GB-T 26593-2011 无损检测仪器 工业用X射线CT装置性能测试方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了工业用X 射线CT 装置(以下简称CT 装置)性能测试的术语、定义、缩略语以及空间 分辨力、密度分辨率…

BChecks 自定义poc检测 - 把BurpSuite 打造成强大的漏洞扫描器

BChecks是什么? BChecks可以创建和导入的自定义扫描检查。Burp Scanner在执行其内置扫描例程的同时运行这些检查,帮助您定位扫描并使测试工作流尽可能高效。 每个BCheck都定义为一个以.bcheck文件扩展名结尾的纯文本文件。这些文件使用自定义语言来指定…

配置OSPF路由

OSPF路由 1.OSPF路由 1.1 OSPF简介 OSPF(Open Shortest Path First,开放式最短路径优先)路由协议是另一个比较常用的路由协议之一,它通过路由器之间通告网络接口的状态,使用最短路径算法建立路由表。在生成路由表时,…

Spring Cloud Netflix 教程和源码

本教程目标 想要系统地学习 Spring Cloud Netflix, 把自己的学习过程记录下来。 状态 持续更新中 微服务架构 微服务架构是一种将应用程序拆分为一组独立的、可独立部署的服务的架构模式。每个服务都运行在自己的进程中,可以独立地进行开发、测试和…

数据库管理-第108期 因Exadata存储节点操作系统空间异常的紧急处理(20230928)

数据库管理-第108期 因Exadata存储节点操作系统空间异常的紧急处理(20230928) 众所周知,明天放假了,本着对客户数据库软硬件负责任的态度,进行了一次深入彻底的软硬件巡检(就是检查包括计算节点、存储节点…

vue3中状态适配

写一个函数,在函数中定义一个对象 用于存放键值对,最后返回指定状态所对应的的值,即对象[指定状态] 的 对象的值。 在模板中把状态传入 // vue3 setup语法糖中 const formatXXXState (xxxState)>{const stateMap {键1: 值1,键2: 值2,.…

Linux-正则三剑客

目录 一、正则简介 1.正则表达式分两类: 2.正则表达式的意义 二、Linux三剑客简介 1.文本处理工具,均支持正则表达式引擎 2.正则表达式分类 3.基本正则表达式BRE集合 4.扩展正则表达式ere集合 三、grep 1.简介 2.实践 3.贪婪匹配 四、sed …

VS+Qt+opencascade三维绘图stp/step/igs/stl格式图形读取显示

程序示例精选 VSQtopencascade三维绘图stp/step/igs/stl格式图形读取显示 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《VSQtopencascade三维绘图stp/step/igs/stl格式图形读取显示》编写…

postman安装使用教程

本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序。 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧。 1. 官网安装(别看) 打开官网,https://ww…

【计算机网络】P2P文件分发介绍

文章目录 P2P体系结构的自扩展性BitTorrent协议参考资料 考虑一个场景:从单一服务器向大量主机(称为对等方)分发一个大文件。 两种处理方式 客户-服务器文件分发:服务器需要向每个对等方发送该文件的一个副本 P2P文件分发&#xf…

使用代理后pip install 出现ssl错误

window直接设置代理 httphttp://127.0.0.1:7890;httpshttp://127.0.0.1

Java 并发编程面试题——BlockingQueue

目录 1.什么是阻塞队列 (BlockingQueue)?2.BlockingQueue 有哪些核心方法?3.BlockingQueue 有哪些常用的实现类?3.1.ArrayBlockingQueue3.2.DelayQueue3.3.LinkedBlockingQueue3.4.PriorityBlockingQueue3.5.SynchronousQueue 4.✨BlockingQu…

【C++】构造函数和析构函数第二部分(拷贝构造函数)--- 2023.9.28

目录 什么是拷贝构造函数?编译器默认的拷贝构造函数构造函数的分类及调用结束语 什么是拷贝构造函数? 用一句话来描述为拷贝构造即 “用一个已知的对象去初始化另一个对象” 具体怎么使用我们直接看代码,代码如下: class Maker…

什么是DOM和DOM操作

什么是DOM? DOM(文档对象模型):HTML文档的结构化表示。允许JavaScript访问HTML元素和样式来操作它们。(更改文本,HTML属性甚至CSS样式) 树结构由HTML加载后自动生成 DOM树结构 这个是一个很简单的HTML代…

Redis与分布式-主从复制

接上文 常用中间件-OAuth2 1.主从复制 启动两个redis服务器。 修改第一个服务器地址 修改第二个redis 然后分别启动 redis-server.exe redis.windows.conf) 查看当前服务器的主从状态,打开客户端:输入info replication命令来查看当前的主从状态&am…

数据结构基础9:排序全家桶

排序全家桶: 一:插入排序:1.简单插入排序:2.希尔排序: 二:选择排序:1.简单选择排序:2.堆排序(空间复杂度为O(1)): 三:快速排序;方法一…

共同见证丨酷雷曼武汉运营中心成立2周年

酷雷曼武汉运营中心2周年 全国合作商齐贺武汉公司2周年庆 2021年 作为酷雷曼辐射全国版图的又一重要据点 酷雷曼武汉运营中心 在“中国光谷”正式成立 沉浸式参观酷雷曼武汉公司 2年时间 尽管历经诸多客观因素的挑战 但后浪扬帆,依然交出了不斐的成绩 解决…

用AI写文章被百家号封禁

我是卢松松,点点上面的头像,欢迎关注我哦! 千万不要用AI创作,尤其是原文照搬!不要用ai,不要用,不要用!重要的事情说三遍。 近日ID名为“爸爸在家赚钱”用AI写了4-5篇文章投稿在百家号,随后百度就把他帐号…

【Bond与你白话IaC之Terraform for Docker篇】 攻城狮如何向女友解释IaC呢?

前言: 最近有机会与朋友聊到IaC(Infra as code)说到是否有比较好的切入点进行学习。 客观地说,看到XaX或XasX结构的的名词,让人立刻会与最前沿的云技术联系起来,但实际上其背后的思想仍然来自于传统系统的痛…

python web编程一:token、session、cookie、密码加解密

1 认证 1 传统的session-cookie机制 HTTP协议是无状态协议,为了解决它产生了cookie和session技术。 浏览器发起第一次请求到服务器,服务器发现浏览器没有提供session id,就认为这是第一次请求,会返回一个新的session id给浏览器…