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

数组间的比较过滤/JS取出两个数组相同元素 数组间的比较过滤 举个栗子: data是你刚请求到的数据,arr1 是另一个接口的数据  现在需要根据arr1 来过滤一遍data中的数据    如果arr1中 isHas 的属性为真,且id 在data中也是同时存在的数据 那么可ton过二次循环过滤,重组数组的方法 let data = [ {name: "name一",isSelected: false,value: 111},... 阅读详情

方法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() 可满足需求

    • 大数组:使用 Set(Set.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 避免阻塞

Js比较两个数组是否相同 别再相信toString和JSON.stringfy了!这个才管用xdm! 阅读详情

相关推荐

JavaScript判断两个数组是否有重复的元素

本文介绍了两种方法来判断两个数组是否存在重复元素:双重循环和集合(Set)。双重循环的方法通过遍历两个数组的所有元素进行比较,时间复杂度为O(n^2)。而使用集合(Set)的方法可以将时间复杂度降低到O(n),因为集合的查找操作是近似常数时间。根据具体的需求和数据规模,选择合适的方法来判断数组中是否存在重复元素。除了双重循环的方法,我们还可以使用JavaScript的集合(Set)来判断两个数组是否有重复元素。集合是一种无序且唯一的数据结构,我们可以利用这个特性来判断数组中是否有重复元素。

CyberLynxO的博客 2352

js怎么判断两数组之间有没有交集

js判断数组之间有没有交集

weixin_38897313的博客 4743

JavaScript实现两个数组交集的方法

filter()方法创建一个新数组,包含通过所提供函数实现的测试的所有元素。这个方法在实现数组交集时尤其有用,因为它可以筛选出两个数组中共同的元素。filter()方法的参数是一个测试函数,该函数会为数组中的每个元素执行,如果函数返回true,则当前元素会被包含在新数组中。reduce()方法在JavaScript数组中是一个极其强大的函数,它在数组中迭代元素,并将它们累积到一个单一的结果中。它的工作原理是接受一个回调函数和一个初始值,然后对数组的每个元素执行该回调函数,将其返回值累积起来。

weixin_26850469的博客 1161

JS计算两个数组的交集、差集、并集、补集(多种实现方式)

方法一:最普遍的做法 使用 ES5 语法来实现虽然会麻烦些,但兼容性最好,不用考虑浏览器 JavaScript 版本。也不用引入其他第三方库。 1. 直接使用 filter、concat 来计算 var a = [1,2,3,4,5] var b = [2,4,6,8,10] //交集 var c = a.filter(function(v){ return b.indexOf(v) > -...

0123456789 1305

JavaScript中判断两个数组是否完全相同的完整方法与实战

在JavaScript中,两个数组被视为“相等”仅当它们具有相同的长度、元素顺序一致,且每个对应位置的值严格相等(===例如:// false —— 引用不同尽管内容相同,但数组是引用类型,===比较的是内存地址而非内容。在真实项目中,我们通常希望将对象数组比较逻辑封装成一个通用工具函数,既能复用又易于测试和维护。结合与用户可传入的比较器函数,可以实现高度灵活的 API 设计。在多数业务场景中,无需比较整个对象。例如用户列表变更检测,只需比对 ID 集合:== newIds。

weixin_35906794的博客 1065

torch.jit.script 与 torch.jit.trace

它们是 PyTorch 的即时编译(Just-in-Time Compilation)模块的一部分,用于提高模型的执行效率并支持模型的部署。方法只跟踪了给定输入张量的执行路径,因此在使用转换后的模块对象进行推理时,输入张量的维度和数据类型必须与跟踪时使用的相同。跟踪模型可以看作是一个具有相同功能的脚本模型,但它还保留了原始模型的动态特性,可以使用更多高级特性,如动态图和控制流。它接受一个模型和一个示例输入,并记录模型在给定输入上的执行过程,然后返回一个跟踪模型。的模型文件,并将其转换为评估模式。

leoatliang的博客 1万+

JS判断数组是否存在交集

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34392843的博客 4132

帆软报表JS导出避坑指南:如何正确处理sessionid和参数传递

本文深入探讨了帆软报表中通过JavaScript实现一键导出的关键技术,重点解析了如何正确获取并传递sessionid以确保会话不丢失,以及如何构造包含必要参数的导出URL。文章详细对比了预览后导出与直接URL导出两种方式的差异,并提供了从参数拼接、前端触发下载到高级场景(如SPA集成)的完整避坑指南,帮助开发者构建稳定可靠的自定义导出功能。

weixin_42522857的博客 157

js判断两个数组是否存在相同元素的四种方法

以上就是vue项目打包开启gzip压缩具体使用方法的详细内容,更多关于vue打包开启gzip压缩的资料请关注其它相关文章!webpack配置Compression-webpack-plugin压缩gzip文件。作用:提升网络传输率->优化web页面加载时间。

不定时分享最优质的网络技术与教程,满满的干货。 3994

手把手教你用FPGA实现SGMII接口:从IP核配置到板级调试全流程

本文详细介绍了如何在Xilinx 7系列FPGA上实现SGMII(Serial Gigabit Media Independent Interface)接口的全流程,包括IP核配置、约束编写和硬件调试。通过具体的硬件选型建议、软件工具链配置和PCB设计规范,帮助开发者快速构建稳定可靠的千兆通信链路,并提供了常见故障排查和性能优化技巧。

weixin_29194693的博客 292

第17篇:深入解析OpenEuler 24.03系统中的逻辑卷管理(LVM)

OpenEuler 24.03系统中的逻辑卷管理(LVM)提供了灵活的存储管理方案,通过在物理存储与文件系统间构建抽象层实现动态资源分配。

专注于系统运维、数据库、DevOps、虚拟化技术、docker、kubernetes、等云原生技术。 1686

JS比较两个数组是否相等 是否拥有相同元素

Javascript怎么比较两个数组是否相同?JS怎么比较两个数组是否有完全相同的元素?Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都会返回false <script type="text/javascript"> alert([]==[]); alert([]===[...

weixin_38170468的博客 5771

面试复习题--RN面试

考察点:热更新方案的深度理解,选型能力,实战落地经验。答题思路主流热更新方案对比。

hqiangtai的博客 716

js比较两个数组是否相同

js判断两个数组是否相同来进行不同操作,代码如下: //比较数组 function compareArray(a1, a2) { if (a1 === a2) return true; if ((!a1 && a2) || (a1 && ! a2)) return false; if (a1.length !== a2.length) return false; for (var i = 0, n = a1.length; i < n

zcc的博客 1万+

esim分布式云卡池技术

eSIM卡,即Embedded-SIM,嵌入式SIM卡。eSIM卡的概念就是将传统SIM卡直接嵌入到设备芯片上,而不是作为独立的可移除零部件加入设备中,用户无需插入物理SIM卡。这一做法将允许用户更加灵活的选择运营商套餐,或者在无需解锁设备、购买新设备的前提下随时更换运营商。未来通用的eSIM标准建立将为普通消费者、企业用户节省更多移动设备使用成本,并带来更多的便利、安全性。 2018年 3月7日,中国联通宣布,正式在上海、天津、广州、深圳、郑州、长沙6座城市率先启动“eSIM一号双终端”业务的办理。[.

著名博客 3703

[QMT量化交易小白入门]-二十四、年化收益47%的全球核心资产轮动策略(含代码解析)

m_days = 25 #动量参考天数period=200m_days被设置为25,表示动量参考的天数为25天;period被设置为200,用于指定获取市场数据的周期长度。

木头大左的博客 2959

JS比较两个数组是否相等 是否拥有相同元素(转)

JS比较两个数组是否相等 是否拥有相同元素 Javascript怎么比较两个数组是否相同? JS怎么比较两个数组是否有完全相同的元素? Javascript不能直接用==或者===来判断两个数组是否相等,无论是相等还是全等都不行,以下两行JS代码都会返回false <script type="text/javascript"> alert([]==[]); alert([]===[]); </script> 要判断JS中的两个数组是否相同,需要

hjiaqing的博客 1974

Happycapy深度解析:AI智能体的“iPhone时刻“来了?

从理论到实践深度解析了融合OpenClaw和ClaudeCode优点的超强智能体工具Happycapy

program哲学 446

js 得到两个数组中相同的 数据

var a = [1,2,3,4,5,6,7]; var b = [1,2,5]; var c = []; var tmp = a.concat(b); var o = {}; for (var i = 0; i &lt; tmp.length; i ++) (tmp[i] in o) ? o[tmp[i]] ++ : o[tmp[i]] = 1; for (x in o) if (o...

qq_39510043的博客 4748

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

判断两个数组是否拥有相同的元素

Array.prototype.isHasSameEle = function (array2) { //做比较的两个数组 var array1 = this; //临时数组存放 var tempArray1 = [];//临时数组1 var tempArray2 = [];/...

Nemo的笔记本 7488

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JS取出两个数组中的不同或相同元素

1、取出两个数组的不同元素 var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1, arr2) { return arr1.concat(arr2).filter(function(v, i, arr) { return arr.indexOf(v...

weixin_42171955的博客 9095

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

js比较两个对象数组是否相同

js 比较两个对象数组是否完全相同 let obj1 = [{"id" : 1, "name" : "xiaoMing"}]; let obj2 = [{"id" : 1, "name" : "xiaoMing"}]; var isEqualN = JSON.stringify(obj1) === JSON.stringify(obj2); console.log(isEqualN);//true let obj1 = [{"id" : 1, "name" : "xiaoMing"}]; let o

zcc的博客 1万+

JS之比较两个对象是否相同

① 方法一:通过JSON.stringify(obj)来判断两个对象转后的字符串是否相等 优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错 ② 方法二: 较为简单的方法,如下 //比较2个对象是否相同 function isObjEqual(o1,o2){ var props1 = Object.getOwnPropertyNames(o1); var props2 = Object.getOwn

一片天空 7491

比较两个数组是否相同及两个对象是否相同

最近做图片上传时,当修改图片时会用到判断两个数组是否相同。虽然最近没有采取比较两个数组是否相同,但也因此研究了下比较两个数组是否相同的方法,首页在网上查了一下相关资料更多的是用到数组转化为字符串进行比较,代码如下: const arr1 = [1,2,3]; const arr2 = [1,3,2]; console.log(arr1.sort().toString() == arr2.sort(...

cskiss2012的博客 1102

详解JS取出两个数组中的不同或相同元素

详解JS取出两个数组中的不同或相同元素1、取出两个数组的不同元素2、取出两个数组的相同元素 1、取出两个数组的不同元素 var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,5,6,7,8]; function getDiffer(arr1, arr2) { return arr1.concat(arr2).filter(function(value, ind...

Dragonfly_w的博客 3505

js筛选两个数组中相同的元素

js筛选两个数组中相同的元素

weixin_43550562的博客 1857
上一篇: 在 Element UI 的 el-table 中实现某行标红并显示删除线
下一篇: 实现单选、多选,以及点击行任意位置勾选
m0_61618849
博客等级 码龄5年 187粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值