判断对象是否相等

使用最简单的方法判断两对象或数组是否相等

一、两对象是否相等

已知两纯对象

let a = { a: 1, b: 2 };
let b = { a: 1, b: 2 };

我们都知道 a == b ,返回 false ,我们要如何写一个方法,使得键值对都是一样的则认为两个对象是相等的?

方法如下:

let equalObject = (o1, o2) => {
	//判断两变量类型是否一致 如果没有这个判断 [1, 2], { '0': 1, '1': 2 } 会返回true;
	if (!(Object.prototype.toString.call(o1) == Object.prototype.toString.call(o2))) {
        return false;
    }
    if (!(o1 instanceof Object) || !(o2 instanceof Object)) {
        return false;
    }
    if (Object.keys(o1).length !== Object.keys(o2).length) {
        return false;
    }
    return Object.keys(o1).every(v => o1[v] === o2[v]);
};

如果两对象是数组,equalObject(arr1,arr2) 方法同样适用;

二、 深度比较两对象或数组

实现一个方法,只要内容形态一致,则任务数组或对象相等,例如:

let a = { a: [1, '2'], b: 2 };
let b =  { b: 2, a: [1, '2'] };

方法如下:

let equal = (o1, o2) => {
    if (!(Object.prototype.toString.call(o1) == Object.prototype.toString.call(o2))) {
        return false;
    }
    if (!(o1 instanceof Object) || !(o2 instanceof Object)) {
        return false;
    }
    if (Object.keys(o1).length !== Object.keys(o2).length) {
        return false;
    }
    return Object.keys(o1).every(v => {
        if (o1[v] instanceof Object) {
            return equal(o1[v], o2[v]);
        } else {
            return o1[v] === o2[v];
        }
    });
};

equal({ a: [1, '2'], b: 2 }, { b: 2, a: [1, '2'] }) //true

转载于:https://my.oschina.net/u/1778998/blog/3023346

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值