JS判断两个数组是否相等

今天对数组进行操作时,发现不能用==操作符比较两个数组是否相等。
以前我都是遍历数组进行比较,今天写着写着,惯性使然,用了 等等操作符。
发现无论怎么操作,两个数组比较结果都是false。

不能直接使用 ==原因

对于对象来说,== 比较的是两个对象是否为同一个对象。
数组属于对象类型,尽管数组元素是相同的,但这两个数组属于不同的对象,
所以 == 比较为false

如果要比较数组,最准确的还是遍历数组(特别是嵌套数组)

let arr1 = [1,2,3,4,], arr2 = [2,3,4,5];
for (let i = 0; i <= arr1.length; i++) {
     if (arr1[i] !== arr2[i]) {
         return false;
     } 
 }    

1、every() 方法

every() 方法使用指定函数检测数组中的所有元素:
1、如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
2、如果所有元素都满足条件,则返回 true3、注意: every() 不会对空数组进行检测。every() 不会改变原数组。

isEqual(arr1, arr2) {
    return arr1.length === arr2.length && arr1.every((item, i) => {
        return item === arr2[i]
    })
}

2、转换成字符串进行比较(需要注意)

arr1.toString() == arr2.toString()
或
JSON.stringify(arr1) === JSON.stringify(arr2);

转换为字符串后再比较的性能是比较差的,适用于数组不长的数组。

当两个数组的元素顺序相同且元素都可以转换成字符串的情况下确实可行,但是这样的代码存有隐患,比如数字被转换成字符串,数字“1”和字符串“1”会被认为相等,可能造成调试困难,需要谨慎使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值