Js如何判断两个数组是否相等?
本文目录
- 1、通过数组自带方法比较
- 2、通过循环判断
- 3、`toString()`
- 4、`join()`
- 5、`JSON.stringify()`
日常开发,时不时会遇到需要判定2个数组是否相等的情况,需要实现考虑的场景有:
- 先判断长度,长度不等必然不等
- 元素位置
- 其他情况考虑
'1'和1(Object的key是字符串, Map的key没有限制)NaNnull和undefined
1、通过数组自带方法比较
// 方式1
function isArrEqual1(arr1, arr2) {if (arr1.length !== arr2.length) {return false;}return arr1.every((v, i) => v === arr2[i]);// return !arr1.some((v, i) => v !== arr2[i]);// return arr1.filter((v, i) => v !== arr2[i]).length === 0;// return arr1.findIndex((v, i) => v !== arr2[i]) === -1;
}// 测试
const arr1 = [-2, "-1", 0, 0.1, 1, "2", "a", "", undefined, null],arr2 = [-2, "-1", 0, 0.1, 1, "2", "a", "", undefined, null];isArrEqual1(arr1, arr2); // true
数组自带的方法,比较适合的有:every、some、filter、findIndex。
这种方式严格限制了数组元素长度、类型、位置必须一致。
注意包含NaN也无法比较!NaN是JS中唯一一个与自身不相等的存在!判断NaN是否属于同一个值得用Object.is(),如:Object.is(NaN, NaN); // true
2、通过循环判断
// 方式2
function isArrEqual2(arr1, arr2) {if (arr1.length !== arr2.length) {return false;}for (let i = 0; i < arr1.length; i++) {if (arr1[i] !== arr2[i]) {return false;}}return true;
}
这种判定方法限制及说明同上述方法1。
3、toString()
// 方式3
function isArrEqual3(arr1, arr2) {if (arr1.length !== arr2.length) {return false;}return arr1.toString() === arr2.toString();
}// 测试
isArrEqual3(arr1, arr2); // trueconst arr3 = ['', 1, null, undefined, {}, { a: 1 }, NaN, [], [2, 3], new Date()],arr4 = ['', "1", undefined, null, {}, { a: 2 }, NaN, [], [2, "3"], new Date()];isArrEqual3(arr3, arr4); // true
toString 方法是Object类型对象的实例方法,作用是返回一个对象的字符串形式。
这种方式限制了数组长度和元素位置,但是会发现有些元素类型没有严格限制,这是由于js本身进行的数据隐式转换!
在控制台查看通过toString转化后的数组,得到的结果如下:

此外,对数组、空数组、对象、空对象等引用类型,由于toString转换结果都是[object Object],所以在比较的时候都会判定为相等!
还有,需要注意:
null == undefined // true
null === undefined // false
4、join()
// 方式4
function isArrEqual4(arr1, arr2) {if (arr1.length !== arr2.length) {return false;}return arr1.join() === arr2.join();
}
join 方法是数组的一个实例方法,如果join这个方法如果不传如分割符,其实作用几乎和toString一样,所以实现效果和限制同toString。

5、JSON.stringify()
// 方式5 [推荐]
function isArrEqual5(arr1, arr2) {if (arr1.length !== arr2.length) {return false;}return JSON.stringify(arr1) === JSON.stringify(arr2);
}// 测试
isArrEqual5(arr1, arr2); // true
isArrEqual5(arr3, arr4); // falseconst arr5 = [undefined, null, "", {}, { a: 1 }, NaN, [], [2, 3], new Date()],arr6 = [undefined, null, "", {}, { a: 1 }, NaN, [], [2, 3], new Date()];isArrEqual5(arr5, arr6); // true
JSON.stringify 用于将一个对象或值转换成JSON字符串,转换后结果会带双引号。

从测试结果可以看到,这个比较方式也严格的限制了数组长度、元素位置和元素类型,在日常中比较推荐此种方案~
相关文章:
Js如何判断两个数组是否相等?
本文目录 1、通过数组自带方法比较2、通过循环判断3、toString()4、join()5、JSON.stringify() 日常开发,时不时会遇到需要判定2个数组是否相等的情况,需要实现考虑的场景有: 先判断长度,长度不等必然不等元素位置其他情况考虑 1…...
Salesforce顾问如何拿到更高的薪水?
顾问的角色已经在Salesforce生态系统存在了一段时间,随着Salesforce针对职业发展的Trailhead培训模块的发布,该角色的热度又达到了新的浪潮。越来越多人走上了Salesforce顾问这条职业道路。 当然其薪资水平也非常可观,据调查,美国…...
关于React中的状态和属性
在React中,状态(State)和属性(Props)是两个核心概念,用于管理组件的数据和传递信息。下面详细描述它们的区别: 状态(State): 定义: 状态是组件内部…...
【面试题】谈谈MySQL的索引
索引是啥 可以把Mysql的索引看做是一本书的目录,当你需要快速查找某个章节在哪的时候,就可以利用目录,快速的得到某个章节的具体的页码。Mysql的索引就是为了提高查询的速度,但是降低了增删改的操作效率,也提高了空间…...
python工具方法 45 基于ffmpeg以面向对象多线程的方式实现实时推流
1、视频推流 参考基于ffmpeg模拟监控摄像头输出rtsp视频流并opencv播放 实现视频流的推流。 其基本操作就是,安装视频流推流服务器,ffmpeg,准备好要推流的视频。 命令如下所示:ffmpeg -re -stream_loop -1 -i 风景视频素材分享.flv -c copy -f rtsp rtsp://127.0.0.1:554/…...
HarmonyOS Stage模型基本概念讲解
本文 我们来说harmonyos中的一种应用模型 Stage模型 官方提供了两种模型 一种是早期的 FA模型 另一种就是就是 harmonyos 3.1才开始的新增的一种模型 Stage模型 目前来讲 Stage 会成为现在乃至将来 长期推进的一种模型 也就是 无论是 现在的harmonyos 4.0 乃至 之后要发布的 …...
python自动化接口测试
前几天,同组姐妹说想要对接口那些异常值进行测试,能否有自动化测试的方法。仔细想了一下,工具还挺多,大概分析了一下: 1、soapui:可以对接口参数进行异常值参数化,可以加断言,一般我们会加http…...
深度学习????????
深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展,尤其在自然…...
人工智能技术学习专栏文章汇总—帮助你入门深度学习
人工智能大潮已来,stay hungry, stay foolish! 人工智能技术学习类文章汇总,帮助你入门深度学习。 人工智能学习与实训笔记(一):零基础理解神经网络-CSDN博客 人工智能学习与实训笔记(二)&am…...
线性代数:向量空间
目录 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2...
Pormise---如何解决javascript中回调的信任问题?【详解】
如果阅读有疑问的话,欢迎评论或私信!! 本人会很热心的阐述自己的想法!谢谢!!! 文章目录 回调中的信任问题回调给我们带来的烦恼?调用过早调用过晚调用的次数太少或太多调用回调时未能…...
如何选择最适合的图纸加密软件?用户体验及性价比
安秉网盾图纸加密软件是一款功能强大的图纸加密工具,具有以下特点和优势: 全盘加密:安秉网盾采用先进的加密算法,能对文件、文件夹、磁盘等数据进行全面加密,确保数据在存储和传输过程中的安全性。 监控与审计&#…...
一分钟学会MobaXterm当Linux客户端使用
一、介绍 MobaXterm是一款功能强大的远程计算机管理工具,它集成了各种网络工具和远程连接协议,可以帮助用户在Windows系统上轻松管理远程计算机。MobaXterm支持SSH、Telnet、RDP、VNC等多种远程连接协议,同时还集成了X11服务器,可…...
2024-02-21 算法: 测试链表是否有环
点击 <C 语言编程核心突破> 快速C语言入门 算法: 测试链表是否有环 前言一、双指针 ( 快慢指针 )二、代码总结 前言 要解决问题: 一道简单的算法题, 测试链表是否含有环. 想到的思路: 哈希表, 将链表指针强制转换为整型, 利用求余法建立哈希函数. 太复杂, 内存效率不高…...
http协议工具:apache详解
目录 一、常见的http服务程序 1、 Apache HTTP Server 介绍 1.1 apache 概念 1.2 apache 功能 1.3 apache 特性 2、MPM(multi-processing module)工作模式 2.1 prefork 2.2 worker 2.3 event 二、Apache HTTP Server安装和相关文件 1、安装方…...
我的NPI项目之Android Camera (二) -- 核心部件之 Camera Sensor
说到Camera模组,我们比较关心的是用的什么样的sensor? sensor的分辨率多少,sensor的像素多大,sensor是哪家生产的等等一些问题。今天,我们就穿越时间,将sensor的历史扒一扒。 Wikipedia先看一下࿱…...
【四】3D Object Model之测量Features——get_object_model_3d_params()算子
😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有…...
C++学习Day09之系统标准异常
目录 一、程序及输出1.1 系统标准异常示例1.2 标准异常表格 二、分析与总结 一、程序及输出 1.1 系统标准异常示例 #include<iostream> using namespace std; #include <stdexcept> // std 标准 except 异常class Person { public:Person(int age){if (age <…...
企业计算机服务器中了crypt勒索病毒怎么办,crypt勒索病毒解密数据恢复
计算机服务器设备为企业的生产运营提供了极大便利,企业的重要核心数据大多都存储在计算机服务器中,保护企业计算机服务器免遭勒索病毒攻击,是一项艰巨的工作任务。但即便很多企业都做好的了安全运维工作,依旧免不了被勒索病毒攻击…...
npm详解:掌握package.json配置
package.json 文件中的 scripts 配置允许你定义一系列脚本命令,这些命令可以通过 npm run <script-name> 来执行。下面是一些常见的 scripts 配置,以及它们的详解和举例。 常见的 scripts 配置 start 这是最常用的脚本,通常用于启动应…...
3种方案实现小米智能家居与Home Assistant无缝集成
3种方案实现小米智能家居与Home Assistant无缝集成 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 你是否遇到过智能家居设备品牌碎片化的困扰?是否希望用统…...
六种强鲁棒性永磁同步电机Simulink仿真模型:开启深度探索之旅
六种强鲁棒性永磁同步电机simulink仿真模型(在线参数辩识和扰动观测器) 共包含六个PMSM强鲁棒性(抗模型失配)仿真模型,有助于对比学习: 1.经典的无差预测控制参数失配模型 2.在线参数辩识: 最小…...
React Native WebRTC M124版本终极指南:未来发展方向与特性深度解析
React Native WebRTC M124版本终极指南:未来发展方向与特性深度解析 【免费下载链接】react-native-webrtc The WebRTC module for React Native 项目地址: https://gitcode.com/gh_mirrors/re/react-native-webrtc React Native WebRTC是React Native生态中…...
cv_unet_image-colorization模型监控:推理延迟与成功率实时看板
cv_unet_image-colorization模型监控:推理延迟与成功率实时看板 1. 项目背景与监控需求 在实际的图像上色应用场景中,用户不仅关心最终的上色效果,更需要了解模型的运行状态和性能表现。特别是对于需要批量处理历史照片的用户来说ÿ…...
遥感数据处理避坑指南:实测光谱如何用Matlab匹配卫星波段(以GF-6为例)
遥感数据处理避坑指南:实测光谱如何用Matlab匹配卫星波段(以GF-6为例) 当你在野外辛苦采集的ASD高光谱数据与卫星影像比对时,是否遇到过这样的困惑:明明地面测量值看起来合理,但和卫星数据对比时却总存在难…...
Linux 内核中的文件系统实现:从 VFS 到具体文件系统
Linux 内核中的文件系统实现:从 VFS 到具体文件系统 引言 作为一名前产品经理,我深知数据管理的重要性。在产品开发中,良好的数据管理可以提高系统的可靠性和可用性。在 Linux 内核中,文件系统是一个核心组件,它负责管…...
Kubernetes 与边缘计算集成最佳实践
Kubernetes 与边缘计算集成最佳实践 一、前言 哥们,别整那些花里胡哨的。边缘计算是现代云原生架构的重要组成部分,今天直接上硬货,教你如何在 Kubernetes 中集成边缘计算。 二、边缘计算架构模式 模式适用场景优势劣势集中式简单场景管理简单…...
卡证检测矫正模型开发环境搭建:PyCharm/IDEA项目配置全攻略
卡证检测矫正模型开发环境搭建:PyCharm/IDEA项目配置全攻略 你是不是刚拿到一个卡证检测矫正模型的项目,看着一堆代码和配置文件有点无从下手?特别是想用PyCharm或者IDEA这样的专业工具来开发调试,却不知道从哪一步开始配置环境&…...
终极Mailtrain故障排除指南:10个常见问题与快速解决方案
终极Mailtrain故障排除指南:10个常见问题与快速解决方案 【免费下载链接】mailtrain Self hosted newsletter app 项目地址: https://gitcode.com/gh_mirrors/ma/mailtrain Mailtrain作为一款自托管的 newsletter 应用,为用户提供了强大的邮件营销…...
LSPosed-Irena框架深度解析:构建下一代Android Hook框架的完整指南
LSPosed-Irena框架深度解析:构建下一代Android Hook框架的完整指南 【免费下载链接】LSPosed-Irena Useless LSPosed Framework Fork 项目地址: https://gitcode.com/gh_mirrors/ls/LSPosed-Irena LSPosed-Irena是一个基于LSPlant的ART hooking框架ÿ…...
