在JavaScript中,比较两个数组是否有相同元素(交集)的常用方法

方法1:使用 some() + includes()(适合小数组)

function haveCommonElements(arr1, arr2) {return arr1.some(item => arr2.includes(item));
}// 使用示例
const arrA = [1, 2, 3];
const arrB = [3, 4, 5];
console.log(haveCommonElements(arrA, arrB)); // true

方法2:使用 Set(适合大数组,性能更优)

function haveCommonElements(arr1, arr2) {const set = new Set(arr2);return arr1.some(item => set.has(item));
}// 使用示例
const arrC = ['apple', 'banana'];
const arrD = ['orange', 'banana', 'grape'];
console.log(haveCommonElements(arrC, arrD)); // true

方法3:使用 filter() + includes()(直接获取交集元素)

function getCommonElements(arr1, arr2) {return arr1.filter(item => arr2.includes(item));
}// 检查是否有交集
const common = getCommonElements([1, 2], [2, 3]);
console.log(common.length > 0); // true

注意事项:

  1. 对象/引用类型:以上方法只适用于基本类型(数字、字符串等)。对象比较的是引用地址:

    const obj1 = { id: 1 };
    const obj2 = { id: 1 };
    const arr1 = [obj1];
    const arr2 = [obj2];// 错误:比较的是引用地址而非内容
    console.log(haveCommonElements(arr1, arr2)); // false

    需使用JSON.stringify()或深度比较(如Lodash的_.isEqual())处理对象。

  2. 性能考虑

    • 小数组(<1000元素):includes() 可满足需求

    • 大数组:使用 SetSet.has() 的时间复杂度为 O(1))

完整解决方案(支持基本类型):

function haveCommonElements(arr1, arr2) {// 使用 Set 优化性能const set = new Set(arr2);return arr1.some(item => set.has(item));
}// 测试用例
console.log(haveCommonElements([1, 2], [3, 4]));     // false
console.log(haveCommonElements(['a', 'b'], ['b']));  // true
console.log(haveCommonElements([], []));             // false

处理对象数组的扩展方案:

// 使用 Lodash 的深比较
import _ from 'lodash';function haveCommonObjects(arr1, arr2) {return arr1.some(item1 => arr2.some(item2 => _.isEqual(item1, item2)));
}// 或使用 JSON.stringify(注意:属性顺序需一致)
function haveCommonObjects(arr1, arr2) {const set = new Set(arr2.map(item => JSON.stringify(item)));return arr1.some(item => set.has(JSON.stringify(item)));
}

根据需求选择合适的方法:

  • 基本类型:推荐 Set 方案(高效简洁)

  • 对象类型:使用 Lodash 等库的深度比较函数

  • 超大型数组:考虑分块处理或 Web Worker 避免阻塞

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

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

相关文章

心路历程-Linux的系统破解详细解说

CentOS7系统密码破解 密码破解是分两种情况的&#xff1b;一种是在系统的界面内&#xff0c;一种就是不在系统的页面&#xff1b; 今天我们就来聊聊这个系统破解的话题&#xff1b; 1.为什么需要破解密码&#xff1f;–>那当然是忘记了密码&#xff1b;需从新设置密码 2.但是…

IDE和AHCI硬盘模式有什么区别

IDE&#xff08;Integrated Drive Electronics&#xff09;和 AHCI&#xff08;Advanced Host Controller Interface&#xff09;是硬盘控制器的工作模式&#xff0c;主要区别在于性能、功能兼容性以及对现代存储设备的支持程度。以下是详细对比和分析&#xff1a;一、本质区别…

【密码学实战】密码实现安全测试基础篇 . KAT(已知答案测试)技术解析与实践

KAT 测试技术解析 在密码算法的安全性验证体系中&#xff0c;Known Answer Test&#xff08;KAT&#xff0c;已知答案测试&#xff09;是一项基础且关键的技术。它通过 “已知输入 - 预期输出” 的确定性验证逻辑&#xff0c;为密码算法实现的正确性、合规性提供核心保障&…

如何用Redis作为消息队列

说明&#xff1a;以前背八股文&#xff0c;早就知道 Redis 可以作为消息队列&#xff0c;本文介绍如何实现用 Redis 作为消息队列。 介绍 这里直接介绍 yudao 框架中的实现。yudao 是一套现成的开源系统框架&#xff0c;里面集成了许多基础功能&#xff0c;我们可以在这基础上…

解决 uniapp 修改index.html文件不生效的问题

业务场景&#xff1a;需要在H5网站设置追踪用户行为&#xff08;即埋点&#xff09;的script代码。 问题&#xff1a;无论如何修改根目录下的index.html文件都不会生效 问题原因&#xff1a;在 manifest.json 文件中有个【web配置】—>【index.html模版路径】&#xff0c;…

C语言第十一章内存在数据中的存储

一.整数在内存中的存储在计算机内存中&#xff0c;所有的数字都是以二进制来存储的。整数也不例外&#xff0c;在计算机内存中&#xff0c;整数往往以补码的形式来存储数据。这是为什么呢&#xff1f;在早期计算机表示整数时&#xff0c;最高位为符号位。但是0却有两种表示形式…

K8s部署dashboard平台和基本使用

Kubernetes 的默认 Dashboard 主要用于基本的资源查看与管理,如查看 Pod、Service 等资源的状态,进行简单的创建、删除操作 。然而,在企业级复杂场景下,其功能显得较为局限。 与之相比,开源的 Kubernetes Dashboard 增强版工具 ——Dashboard UI ,为用户带来了更强大的功…

JavaEE进阶-文件操作与IO流核心指南

文章目录JavaEE进阶文件操作与IO流核心指南前言&#xff1a;为什么需要文件操作&#xff1f;一、java.io.File 类的基本用法1.1 文件路径1.2 常用方法示例获取文件信息创建和删除文件目录操作文件重命名和移动二、IO流的基本概念2.1 核心困境&#xff1a;字节流 vs. 字符流字节…

动手学深度学习03-线性神经网络

动手学深度学习pytorch 参考地址&#xff1a;https://zh.d2l.ai/ 文章目录动手学深度学习pytorch1-第03章-线性神经网络1. 线性回归1.1 什么是线性回归&#xff1f;1.2 如何表示线性回归的预测公式&#xff1f;2. 损失函数2.1 什么是损失函数&#xff1f;2.2 如何表示整个训练集…

如何安全解密受限制的PDF文件

当你需要从PDF中复制一段文字用于报告或引用时&#xff0c;如果文件被禁止复制&#xff0c;解密后即可轻松提取内容&#xff0c;避免手动输入的麻烦。它解压后双击主程序即可运行&#xff0c;无需安装&#xff0c;即开即用&#xff0c;十分便捷。建议先将界面语言切换为中文&am…

利用DeepSeek辅助编译c#项目tinyxlsx生成xlsx文件

继续在寻找比较快的xlsx写入库&#xff0c;从https://github.com/TinyXlsx/TinyXlsx/ 看到它的测试结果&#xff0c;比c的openXLSX快几倍&#xff0c;就想试用一下&#xff0c;仔细一看&#xff0c;它是个c#项目&#xff0c;需要.NET 8.0。 于是上微软网站下载了.NET 8.0 SDK&a…

构建现代高并发服务器:从内核机制到架构实践

引言:高并发的挑战与演进 在当今互联网时代,高并发处理能力已成为服务器的核心竞争力。传统的"一个连接一个线程"(Thread-per-Connection)模型由于资源消耗巨大、上下文切换成本高和可扩展性差,早已无法应对数万甚至百万级的并发连接需求。现代高并发服务器基于…

1SG10MHN3F74C2LG Intel Stratix 10 系列 FPGA

1SG10MHN3F74C2LG 是 Intel 推出的 Stratix 10 系列 FPGA 家族中的高端型号&#xff0c;它基于 Intel 与 TSMC 合作的 14 纳米 FinFET 工艺制造&#xff0c;是面向超高性能计算、数据中心加速、5G 通信基础设施、以及高端网络设备的旗舰级可编程逻辑器件。这颗 FPGA 以极高的逻…

IIS访问报错:HTTP 错误 500.19 - Internal Server Error

无法访问请求的页面&#xff0c;因为该页的相关配置数据无效。 由于权限不足而无法读取配置文件解决办法&#xff1a;文件夹添加用户权限Everyone文件夹->鼠标右键->属性->安全->组或用户名->编辑->添加->录入Everyone->检查名称->一路点确定

AI对口型唱演:科技赋能,开启虚拟歌者新篇章

最近在短视频平台闲逛&#xff0c;发现不少朋友都在玩“AI对口型唱演”&#xff0c;这类视频简直成了新晋流量密码。从热门歌曲到经典台词&#xff0c;配上夸张的口型和表情&#xff0c;分分钟就能冲上排行榜前排。不过问题也来了——市面上这么多专用软件&#xff0c;到底哪家…

爬虫逆向--Day16Day17--核心逆向案例3(拦截器关键字、路径关键字、请求堆栈、连续请求)

一、入口定位入口定位-- 关键字搜索-- 方法关键字--最简单&#xff0c;最高效的 排第一-- encrypt 加密-- decrypt 解密-- JSON.stringify 给一个JS对象做Json字符串处理的把一个对象转换为Json字符串JSON.stringify({a:1,b:"2"}){"a":"1…

RuoYi-Vue3项目中Swagger接口测试404,端口问题解析排查

一 问题概述版本&#xff1a;ruoyi前后端分离版&#xff0c;ruoyi版本3.9.0 前端Vue3 后端Spring Boot 2.5.15 本地测试环境ruoyi界面中系统工具下的系统接口集成了Swagger&#xff0c;当对其页面上的接口进行请求测试时却发生了404报错。具体表现如下图二 问题排查 1、与Vue2进…

elasticsearch 7.x elasticsearch 使用scroll滚动查询一页,删除一页,影响后面滚动的查询吗

目录 一 scroll说明 1.1 问题 1.2 scroll分页的机制 1.3 案例分析 一 scroll说明 1.1 问题 elasticsearch 使用scroll滚动查询一页&#xff0c;删除一页&#xff0c;影响后面滚动的查询吗&#xff1f; 答案是&#xff1a; 在 Elasticsearch 中使用 Scroll API 进行“…

MacBook Pro M1升级Burp Suite2025.8

一、安装最新Burp Suite2025.8 下载最新Burp Suite2025.8安装包&#xff1a; Burp Suite Release Notes 下载安装包后&#xff0c;双击安装即可&#xff0c; 二、调整Burp Suite2025.8配置&#xff1b; 工具包下载地址&#xff1a;文件分享 将下载的jar包放到app目录下即可 …

开发避坑指南(30):Vue3 表格动态增加删除行解决方案

需求背景 在Vue3环境中&#xff0c;动态增加或者删除表格的行&#xff0c;该怎么实现&#xff1f;如下图&#xff1a;实现分析 不同于传统js&#xff0c;jquery等框架的面向dom编程&#xff0c;vue中是面向数据编程。对变量的增删自动绑定到dom节点的增删上&#xff0c;所以在v…