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

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

const arr1 = [1,2,3];
const arr2 = [1,3,2];
console.log(arr1.sort().toString() == arr2.sort().toString())  // true

上面的方法只能进行简单数组的比较不够全面,所以自己查找总结了下面的方法:

function compareArray(arr1, arr2) {
   let tempArray = Array.from(arr2)
   if (arr1 instanceof Array && arr2 instanceof Array) {
       return arr1.length == arr2.length && arr1.every(item => {
           let delIndex = 0
           let result = false
           if (isNaN(item)) {
               result = tempArray.some((item_2, index) => {
                   if (isNaN(item_2)) {
                       delIndex = index
                       return true
                   }
                   return false
               })
           } else {
               delIndex = tempArray.indexOf(item)
               result = delIndex != -1
           }
           tempArray.splice(delIndex, 1)
           return result
       })
   } else {
       return false
   }
}
const obj = {}
const arr = []
const nan = NaN

const a = [1, 2, 3, obj, arr, nan]
const b = [obj, arr, 3, 2, 1, nan]

console.log('compareArray:', compareArray(a, b))  // compareArray: true

随便也附带总结了判断两个对象是否相同的方法,代码如下:

function compareObj(obj1, obj2) {
    if (obj1 === obj2) {
        return true
    }
    if (! (obj1 instanceof Object) || ! (obj2 instanceof Object)) {
        return false
    }
    if ( obj1.constructor !== obj2.constructor) {
        return false
    }
    for (var p in obj1) {
        if (obj1.hasOwnProperty(p)) {
            if (!obj2.hasOwnProperty(p)) {
                return false
            }
            if (obj1[p] === obj2[p]) {
                continue
            }
            if (typeof obj1[p] !== 'object') {
                return false
            }
        }
    }
    for (var p in obj2) {
        if (obj1.hasOwnProperty(p) && !obj2.hasOwnProperty(p)) {
            return false
        }
    }
    return true

}
const obj = {name: 'dean', age: 18}
const obj2 = {age: 18, name: 'dean'}

console.log('compareObj:', compareObj(obj, obj2)) // compareObj: true
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值